爬蟲(chóng)可以收集大量的數(shù)據(jù),比如商品價(jià)格和銷售數(shù)據(jù),或者抓取各種崗位信息并分析市場(chǎng)情況等。爬蟲(chóng)有很多領(lǐng)域和廣泛的應(yīng)用。因此,即使很多人學(xué)習(xí)其他編程語(yǔ)言,他們也會(huì)學(xué)習(xí)Python。都說(shuō)Python簡(jiǎn)單,但對(duì)初學(xué)者來(lái)說(shuō)也很難。下面小編介紹一些學(xué)習(xí)Python爬蟲(chóng)需要掌握的基本知識(shí)點(diǎn)。
1.了解爬蟲(chóng)的基本過(guò)程。
大多數(shù)爬蟲(chóng)遵循“發(fā)送請(qǐng)求-獲取頁(yè)面-解析頁(yè)面-提取并存儲(chǔ)內(nèi)容”的過(guò)程,實(shí)際上模擬了使用瀏覽器獲取web信息的過(guò)程。
2.了解并熟悉Python包。
Python中有很多與爬蟲(chóng)相關(guān)的包:urllib、requests、bs4、scratch、pyspider等。建議從requests+Xpath開(kāi)始,其中requests負(fù)責(zé)連接網(wǎng)站和返回網(wǎng)頁(yè),Xpath用于解析網(wǎng)頁(yè),方便提取數(shù)據(jù)。如果你用過(guò)BeautifulSoup,你會(huì)發(fā)現(xiàn)Xpath省去了很多麻煩,省去了逐層檢查元素代碼的工作。這樣,基本的套路幾乎都一樣,一般的靜態(tài)網(wǎng)站完全不是問(wèn)題。當(dāng)然,如果需要對(duì)異步加載的網(wǎng)站進(jìn)行抓取,可以學(xué)習(xí)瀏覽器抓取包并分析真實(shí)請(qǐng)求,或者學(xué)習(xí)Selenium實(shí)現(xiàn)自動(dòng)化,這樣就可以輕松解決知乎、時(shí)代網(wǎng)、貓步鷹等動(dòng)態(tài)網(wǎng)站。
3.了解數(shù)據(jù)的存儲(chǔ)。
抓取的數(shù)據(jù)可以以文檔的形式直接存儲(chǔ)在本地,也可以存儲(chǔ)在數(shù)據(jù)庫(kù)中。剛開(kāi)始的時(shí)候,當(dāng)數(shù)據(jù)量不大的時(shí)候,可以直接通過(guò)Python語(yǔ)法或者pandas方法將數(shù)據(jù)保存為csv文件。
當(dāng)爬回的數(shù)據(jù)量很少時(shí),可以以文檔的形式存儲(chǔ)。一旦數(shù)據(jù)量很大,它將不起作用。所以需要掌握一種數(shù)據(jù)庫(kù),學(xué)習(xí)目前比較主流的MongoDB就可以了。
MongoDB可以方便你存儲(chǔ)一些非結(jié)構(gòu)化的數(shù)據(jù),比如各種評(píng)論的文字,圖片的鏈接等等。也可以用PyMongo更方便地操作Python中的MongoDB。因?yàn)檫@里用到的數(shù)據(jù)庫(kù)知識(shí)其實(shí)很簡(jiǎn)單,主要是如何將數(shù)據(jù)放入倉(cāng)庫(kù)以及如何提取,然后在需要的時(shí)候?qū)W習(xí)。
4.了解數(shù)據(jù)的清理。
當(dāng)然,你可能會(huì)發(fā)現(xiàn)抓取的數(shù)據(jù)不干凈,可能會(huì)有一些缺失和錯(cuò)誤的數(shù)據(jù)。你還需要清理數(shù)據(jù),你可以學(xué)習(xí)熊貓包的基本用法,對(duì)數(shù)據(jù)進(jìn)行預(yù)處理,得到更干凈的數(shù)據(jù)。
5.了解爬蟲(chóng)框架。
Scrapy是一個(gè)非常強(qiáng)大的爬蟲(chóng)框架,它不僅可以方便地構(gòu)造請(qǐng)求,還可以用一個(gè)強(qiáng)大的選擇器方便地解析響應(yīng)。然而,最令人驚訝的是它的超高性能,允許您對(duì)爬蟲(chóng)進(jìn)行工程化和模塊化。學(xué)習(xí)scrapy,可以自己搭建一些爬蟲(chóng)框架,基本具備爬蟲(chóng)工程師的思維。
當(dāng)抓取基礎(chǔ)數(shù)據(jù)不再是問(wèn)題時(shí),你的瓶頸將集中在抓取海量數(shù)據(jù)的效率上。這個(gè)時(shí)候,相信你自然會(huì)接觸到一個(gè)非常厲害的名字:分布式爬蟲(chóng)。
這個(gè)分布式的東西聽(tīng)起來(lái)很可怕,但實(shí)際上它利用多線程的原理讓多個(gè)爬蟲(chóng)同時(shí)工作,這就需要你掌握三個(gè)工具:Scrapy+MongoDB+Redis。前面我們說(shuō)過(guò),Scrapy用來(lái)做基本的頁(yè)面抓取,MongoDB用來(lái)存儲(chǔ)抓取的數(shù)據(jù),Redis用來(lái)存儲(chǔ)待抓取的頁(yè)面隊(duì)列,也就是任務(wù)隊(duì)列。
以上是學(xué)習(xí)Python爬蟲(chóng)的一些基本知識(shí)點(diǎn)。此外,還要注意網(wǎng)站的反爬蟲(chóng)機(jī)制,如動(dòng)態(tài)加載、IP密封、驗(yàn)證碼、userAgent訪問(wèn)限制等。面對(duì)這些反爬蟲(chóng),我們也需要用一些工具來(lái)對(duì)付它們。比如IP限制可以通過(guò)使用IP模擬器代理進(jìn)行IP工具的切換,這樣我們就可以突破IP限制。