Python爬蟲入門并不難罕伯,甚至進階也很簡單(去廣告版)

image

互聯(lián)網(wǎng)的數(shù)據(jù)爆炸式的增長,而利用 Python 爬蟲我們可以獲取大量有價值的數(shù)據(jù):

1.爬取數(shù)據(jù)叽讳,進行市場調研和商業(yè)分析

爬取知乎優(yōu)質答案追他,篩選各話題下最優(yōu)質的內(nèi)容; 抓取房產(chǎn)網(wǎng)站買賣信息岛蚤,分析房價變化趨勢邑狸、做不同區(qū)域的房價分析;爬取招聘網(wǎng)站職位信息涤妒,分析各行業(yè)人才需求情況及薪資水平单雾。

2.作為機器學習、數(shù)據(jù)挖掘的原始數(shù)據(jù)

比如你要做一個推薦系統(tǒng)她紫,那么你可以去爬取更多維度的數(shù)據(jù)硅堆,做出更好的模型。

3.爬取優(yōu)質的資源:圖片贿讹、文本渐逃、視頻

爬取商品(店鋪)評論以及各種圖片網(wǎng)站,獲得圖片資源以及評論文本數(shù)據(jù)民褂。

掌握正確的方法朴乖,在短時間內(nèi)做到能夠爬取主流網(wǎng)站的數(shù)據(jù),其實非常容易實現(xiàn)助赞。

但建議你從一開始就要有一個具體的目標,在目標的驅動下袁勺,你的學習才會更加精準和高效雹食。這里給你一條平滑的、零基礎快速入門的學習路徑:

1.了解爬蟲的基本原理及過程

2.Requests+Xpath 實現(xiàn)通用爬蟲套路

3.了解非結構化數(shù)據(jù)的存儲

4.應對特殊網(wǎng)站的反爬蟲措施

5.Scrapy 與 MongoDB期丰,進階分布式

01 了解爬蟲的基本原理及過程

大部分爬蟲都是按“發(fā)送請求——獲得頁面——解析頁面——抽取并儲存內(nèi)容”這樣的流程來進行群叶,這其實也是模擬了我們使用瀏覽器獲取網(wǎng)頁信息的過程。

簡單來說钝荡,我們向服務器發(fā)送請求后街立,會得到返回的頁面,通過解析頁面之后埠通,我們可以抽取我們想要的那部分信息赎离,并存儲在指定的文檔或數(shù)據(jù)庫中。

在這部分你可以簡單了解 HTTP 協(xié)議及網(wǎng)頁基礎知識端辱,比如 POST\GET梁剔、HTML虽画、CSS、JS荣病,簡單了解即可码撰,不需要系統(tǒng)學習。

02 學習 Python 包并實現(xiàn)基本的爬蟲過程

Python中爬蟲相關的包很多:urllib个盆、requests脖岛、bs4、scrapy颊亮、pyspider 等柴梆,建議你從requests+Xpath 開始,requests 負責連接網(wǎng)站编兄,返回網(wǎng)頁轩性,Xpath 用于解析網(wǎng)頁,便于抽取數(shù)據(jù)狠鸳。

如果你用過 BeautifulSoup揣苏,會發(fā)現(xiàn) Xpath 要省事不少,一層一層檢查元素代碼的工作件舵,全都省略了卸察。掌握之后,你會發(fā)現(xiàn)爬蟲的基本套路都差不多铅祸,一般的靜態(tài)網(wǎng)站根本不在話下坑质,小豬、豆瓣临梗、糗事百科涡扼、騰訊新聞等基本上都可以上手了。

來看一個爬取豆瓣短評的例子:

image

選中第一條短評盟庞,右鍵-“檢查”吃沪,即可查看源代碼

image

把短評信息的XPath信息復制下來

image

我們通過定位,得到了第一條短評的 XPath 信息:

image

如果我們想爬取很多條短評什猖,那么自然應該去獲绕北搿(復制)更多這樣的 XPath:

image

觀察第1、2不狮、3條短評的 XPath降铸,你會發(fā)現(xiàn)規(guī)律,只有<li>后面的序號不一樣摇零,恰好與短評的序號相對應推掸。那如果我們想爬取這個頁面所有的短評信息,那么不要這個序號就好了呀。

通過XPath信息终佛,我們就可以用簡單的代碼將其爬取下來了:

image
image

爬取的該頁面所有的短評信息

當然如果你需要爬取異步加載的網(wǎng)站俊嗽,可以學習瀏覽器抓包分析真實請求或者學習Selenium來實現(xiàn)自動化爬取,這樣铃彰,知乎绍豁、時光網(wǎng)、貓途鷹這些動態(tài)的網(wǎng)站也基本沒問題了牙捉。

你還需要了解 Python 的基礎知識竹揍,比如:

文件讀寫操作:用來讀取參數(shù)、保存爬取內(nèi)容

list(列表)邪铲、dict(字典):用來序列化爬取的數(shù)據(jù)

條件判斷(if/else):解決爬蟲中的判斷是否執(zhí)行

循環(huán)和迭代(for ……while):用來循環(huán)爬蟲步驟

03 非結構化數(shù)據(jù)的存儲

爬回來的數(shù)據(jù)可以直接用文檔形式存在本地芬位,也可以存入數(shù)據(jù)庫中。

開始數(shù)據(jù)量不大的時候带到,你可以直接通過 Python 的語法或 pandas 的方法將數(shù)據(jù)存為text昧碉、csv這樣的文件。還是延續(xù)上面的例子:

用Python的基礎語言實現(xiàn)存儲:

image

用pandas的語言來存儲:

image

這兩段代碼都可將爬下來的短評信息存儲起來揽惹,把代碼貼在爬取代碼后面即可被饿。

image

存儲的該頁的短評數(shù)據(jù)

</figure>

當然你可能發(fā)現(xiàn)爬回來的數(shù)據(jù)并不是干凈的,可能會有缺失搪搏、錯誤等等狭握,你還需要對數(shù)據(jù)進行清洗,可以學習 pandas 包疯溺,掌握以下知識點就好:

缺失值處理:對缺失數(shù)據(jù)行進行刪除或填充

重復值處理:重復值的判斷與刪除

空格和異常值處理:清楚不必要的空格和極端论颅、異常數(shù)據(jù)

數(shù)據(jù)分組:數(shù)據(jù)劃分、分別執(zhí)行函數(shù)囱嫩、數(shù)據(jù)重組

04掌握各種技巧恃疯,應對特殊網(wǎng)站的反爬措施

爬取一個頁面的的數(shù)據(jù)是沒問題了,但是我們通常是要爬取多個頁面墨闲。

這個時候就要看看在翻頁的時候url是如何變化了今妄,還是以短評的頁面為例,我們來看多個頁面的url有什么不同:

image

通過前四個頁面损俭,我們就能夠發(fā)現(xiàn)規(guī)律了,不同的頁面潘酗,只是在最后標記了頁面的序號杆兵。我們以爬取5個頁面為例,寫一個循環(huán)更新頁面地址就好了仔夺。

image

當然琐脏,爬蟲過程中也會經(jīng)歷一些絕望啊,比如被網(wǎng)站封IP、比如各種奇怪的驗證碼日裙、userAgent訪問限制吹艇、各種動態(tài)加載等等。

遇到這些反爬蟲的手段昂拂,當然還需要一些高級的技巧來應對受神,常規(guī)的比如訪問頻率控制、使用代理IP池格侯、抓包鼻听、驗證碼的OCR處理等等。

比如我們經(jīng)常發(fā)現(xiàn)有的網(wǎng)站翻頁后url并不變化联四,這通常就是異步加載撑碴。我們用開發(fā)者工具取分析網(wǎng)頁加載信息,通常能夠得到意外的收獲朝墩。

image

通過開發(fā)者工具分析加載的信息.比如很多時候如果我們發(fā)現(xiàn)網(wǎng)頁不能通過代碼訪問醉拓,可以嘗試加入userAgent 信息,甚至是瀏覽器的 cookie 信息收苏。

往往網(wǎng)站在高效開發(fā)和反爬蟲之間會偏向前者亿卤,這也為爬蟲提供了空間,掌握這些應對反爬蟲的技巧倒戏,絕大部分的網(wǎng)站已經(jīng)難不到你了怠噪。

05. Scrapy 與 MongoDB,進階分布式

掌握前面的技術杜跷,一般量級的數(shù)據(jù)和代碼基本沒有問題了傍念,但是在遇到非常復雜的情況,可能仍然會力不從心葛闷,這個時候憋槐,強大的 scrapy 框架就非常有用了。

scrapy 是一個功能非常強大的爬蟲框架淑趾,它不僅能便捷地構建request阳仔,還有強大的 selector 能夠方便地解析 response,然而它最讓人驚喜的還是它超高的性能扣泊,讓你可以將爬蟲工程化近范、模塊化。

image

分布式爬取租房信息

爬取的數(shù)據(jù)量大了延蟹,自然會需要數(shù)據(jù)庫评矩,MongoDB 可以方便你去存儲大規(guī)模的數(shù)據(jù)。因為這里要用到的數(shù)據(jù)庫知識其實非常簡單阱飘,主要是數(shù)據(jù)如何入庫斥杜、如何進行提取虱颗,在需要的時候再學習就行。

image

MongoDB 存儲職位信息

分布式這個東西蔗喂,聽起來非常嚇人忘渔,但其實就是利用多線程的原理讓多個爬蟲同時工作,需要你掌握 Scrapy + MongoDB + Redis 這三種工具缰儿。

Scrapy 用于做基本的頁面爬取畦粮,MongoDB 用于存儲爬取的數(shù)據(jù),Redis 則用來存儲要爬取的網(wǎng)頁隊列返弹,也就是任務隊列锈玉。

這個時候,你已經(jīng)可以去寫分布式爬蟲了义起。

你看拉背,這一條學習路徑下來,你已然可以成為老司機了默终,非常的順暢椅棺。所以在一開始的時候,盡量不要系統(tǒng)地去啃一些東西齐蔽,找一個實際的項目(開始可以從豆瓣两疚、小豬這種簡單的入手),直接開始就好含滴。

因為爬蟲這種技術诱渤,既不需要你系統(tǒng)地精通一門語言,也不需要多么高深的數(shù)據(jù)庫技術谈况,高效的姿勢就是從實際的項目中去學習這些零散的知識點勺美,你能保證每次學到的都是最需要的那部分。

當然唯一麻煩的是碑韵,在具體的問題中赡茸,如何找到具體需要的那部分學習資源、如何篩選和甄別祝闻,是很多初學者面臨的一個大問題占卧。

不過不用擔心,我們準備了一門非常系統(tǒng)的爬蟲課程联喘,除了為你提供一條清晰的學習路徑华蜒,我們甄選了最實用的學習資源以及龐大的主流爬蟲案例庫。短時間的學習豁遭,你就能夠很好地掌握爬蟲這個技能叭喜,獲取你想得到的數(shù)據(jù)。

《Python爬蟲:入門+進階》大綱

第一章:Python 爬蟲入門

1堤框、什么是爬蟲

網(wǎng)址構成和翻頁機制

網(wǎng)頁源碼結構及網(wǎng)頁請求過程

爬蟲的應用及基本原理

2域滥、初識Python爬蟲

Python爬蟲環(huán)境搭建

創(chuàng)建第一個爬蟲:爬取百度首頁

爬蟲三步驟:獲取數(shù)據(jù)、解析數(shù)據(jù)蜈抓、保存數(shù)據(jù)

3启绰、使用Requests爬取豆瓣短評

Requests的安裝和基本用法

用Requests 爬取豆瓣短評信息

一定要知道的爬蟲協(xié)議

4、使用Xpath解析豆瓣短評

解析神器Xpath的安裝及介紹

Xpath的使用:瀏覽器復制和手寫

實戰(zhàn):用 Xpath 解析豆瓣短評信息

5沟使、使用pandas保存豆瓣短評數(shù)據(jù)

pandas 的基本用法介紹

pandas文件保存委可、數(shù)據(jù)處理

實戰(zhàn):使用pandas保存豆瓣短評數(shù)據(jù)

6、瀏覽器抓包及headers設置(案例一:爬取知乎)

爬蟲的一般思路:抓取腊嗡、解析着倾、存儲

瀏覽器抓包獲取Ajax加載的數(shù)據(jù)

設置headers 突破反爬蟲限制

實戰(zhàn):爬取知乎用戶數(shù)據(jù)

7、數(shù)據(jù)入庫之MongoDB(案例二:爬取拉勾)

MongoDB及RoboMongo的安裝和使用

設置等待時間和修改信息頭

實戰(zhàn):爬取拉勾職位數(shù)據(jù)

將數(shù)據(jù)存儲在MongoDB中

補充實戰(zhàn):爬取微博移動端數(shù)據(jù)

8燕少、Selenium爬取動態(tài)網(wǎng)頁(案例三:爬取淘寶)

動態(tài)網(wǎng)頁爬取神器Selenium搭建與使用

分析淘寶商品頁面動態(tài)信息

實戰(zhàn):用Selenium 爬取淘寶網(wǎng)頁信息

第二章:Python爬蟲之Scrapy框架

1卡者、爬蟲工程化及Scrapy框架初窺

html、css客们、js崇决、數(shù)據(jù)庫、http協(xié)議底挫、前后臺聯(lián)動

爬蟲進階的工作流程

Scrapy組件:引擎恒傻、調度器、下載中間件建邓、項目管道等

常用的爬蟲工具:各種數(shù)據(jù)庫盈厘、抓包工具等

2、Scrapy安裝及基本使用

Scrapy安裝

Scrapy的基本方法和屬性

開始第一個Scrapy項目

3官边、Scrapy選擇器的用法

常用選擇器:css沸手、xpath、re拒逮、pyquery

css的使用方法

xpath的使用方法

re的使用方法

pyquery的使用方法

4罐氨、Scrapy的項目管道

Item Pipeline的介紹和作用

Item Pipeline的主要函數(shù)

實戰(zhàn)舉例:將數(shù)據(jù)寫入文件

實戰(zhàn)舉例:在管道里過濾數(shù)據(jù)

5、Scrapy的中間件

下載中間件和蜘蛛中間件

下載中間件的三大函數(shù)

系統(tǒng)默認提供的中間件

6滩援、Scrapy的Request和Response詳解

Request對象基礎參數(shù)和高級參數(shù)

Request對象方法

Response對象參數(shù)和方法

Response對象方法的綜合利用詳解

第三章:Python爬蟲進階操作

1栅隐、網(wǎng)絡進階之谷歌瀏覽器抓包分析

http請求詳細分析

網(wǎng)絡面板結構

過濾請求的關鍵字方法

復制、保存和清除網(wǎng)絡信息

查看資源發(fā)起者和依賴關系

2玩徊、數(shù)據(jù)入庫之去重與數(shù)據(jù)庫

數(shù)據(jù)去重

數(shù)據(jù)入庫MongoDB

第四章:分布式爬蟲及實訓項目

1租悄、大規(guī)模并發(fā)采集——分布式爬蟲的編寫

分布式爬蟲介紹

Scrapy分布式爬取原理

Scrapy-Redis的使用

Scrapy分布式部署詳解

2、實訓項目(一)——58同城二手房監(jiān)控

3恩袱、實訓項目(二)——去哪兒網(wǎng)模擬登陸

4泣棋、實訓項目(三)——京東商品數(shù)據(jù)抓取

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市畔塔,隨后出現(xiàn)的幾起案子潭辈,更是在濱河造成了極大的恐慌鸯屿,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,686評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件把敢,死亡現(xiàn)場離奇詭異寄摆,居然都是意外死亡,警方通過查閱死者的電腦和手機修赞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,668評論 3 385
  • 文/潘曉璐 我一進店門婶恼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人柏副,你說我怎么就攤上這事勾邦。” “怎么了割择?”我有些...
    開封第一講書人閱讀 158,160評論 0 348
  • 文/不壞的土叔 我叫張陵眷篇,是天一觀的道長。 經(jīng)常有香客問我荔泳,道長铅歼,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,736評論 1 284
  • 正文 為了忘掉前任换可,我火速辦了婚禮椎椰,結果婚禮上,老公的妹妹穿的比我還像新娘沾鳄。我一直安慰自己慨飘,他們只是感情好,可當我...
    茶點故事閱讀 65,847評論 6 386
  • 文/花漫 我一把揭開白布译荞。 她就那樣靜靜地躺著瓤的,像睡著了一般。 火紅的嫁衣襯著肌膚如雪吞歼。 梳的紋絲不亂的頭發(fā)上圈膏,一...
    開封第一講書人閱讀 50,043評論 1 291
  • 那天,我揣著相機與錄音篙骡,去河邊找鬼稽坤。 笑死,一個胖子當著我的面吹牛糯俗,可吹牛的內(nèi)容都是我干的尿褪。 我是一名探鬼主播,決...
    沈念sama閱讀 39,129評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼得湘,長吁一口氣:“原來是場噩夢啊……” “哼杖玲!你這毒婦竟也來了?” 一聲冷哼從身側響起淘正,我...
    開封第一講書人閱讀 37,872評論 0 268
  • 序言:老撾萬榮一對情侶失蹤摆马,失蹤者是張志新(化名)和其女友劉穎臼闻,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體囤采,經(jīng)...
    沈念sama閱讀 44,318評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡桂肌,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,645評論 2 327
  • 正文 我和宋清朗相戀三年撼班,在試婚紗的時候發(fā)現(xiàn)自己被綠了驯绎。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片肌蜻。...
    茶點故事閱讀 38,777評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡黎泣,死狀恐怖恕刘,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情抒倚,我是刑警寧澤褐着,帶...
    沈念sama閱讀 34,470評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站托呕,受9級特大地震影響含蓉,放射性物質發(fā)生泄漏。R本人自食惡果不足惜项郊,卻給世界環(huán)境...
    茶點故事閱讀 40,126評論 3 317
  • 文/蒙蒙 一馅扣、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧着降,春花似錦差油、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,861評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至交掏,卻和暖如春妆偏,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背盅弛。 一陣腳步聲響...
    開封第一講書人閱讀 32,095評論 1 267
  • 我被黑心中介騙來泰國打工钱骂, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人挪鹏。 一個月前我還...
    沈念sama閱讀 46,589評論 2 362
  • 正文 我出身青樓罐柳,卻偏偏與公主長得像,于是被迫代替她去往敵國和親狰住。 傳聞我的和親對象是個殘疾皇子张吉,可洞房花燭夜當晚...
    茶點故事閱讀 43,687評論 2 351