帶你入門Python爬蟲(chóng),8個(gè)常用爬蟲(chóng)技巧盤點(diǎn)

python作為一門高級(jí)編程語(yǔ)言,它的定位是優(yōu)雅、明確和簡(jiǎn)單。

我學(xué)用python差不多一年時(shí)間了,

用得最多的還是各類爬蟲(chóng)腳本,

寫(xiě)過(guò)抓代理本機(jī)驗(yàn)證的腳本、寫(xiě)過(guò)論壇中自動(dòng)登錄自動(dòng)發(fā)貼的腳本

寫(xiě)過(guò)自動(dòng)收郵件的腳本、寫(xiě)過(guò)簡(jiǎn)單的驗(yàn)證碼識(shí)別的腳本。

這些腳本有一個(gè)共性,都是和web相關(guān)的,

總要用到獲取鏈接的一些方法,故累積了不少爬蟲(chóng)抓站的經(jīng)驗(yàn),

在此總結(jié)一下,那么以后做東西也就不用重復(fù)勞動(dòng)了。

如果你在學(xué)習(xí)Python的過(guò)程中遇見(jiàn)了很多疑問(wèn)和難題,可以加-q-u-n???227 -435-450里面有軟件視頻資料免費(fèi)領(lǐng)取

1、基本抓取網(wǎng)頁(yè)

get方法

post方法

2.使用代理服務(wù)器

這在某些情況下比較有用,

比如IP被封了,或者比如IP訪問(wèn)的次數(shù)受到限制等等。

3.Cookies處理

是的沒(méi)錯(cuò),如果想同時(shí)用代理和cookie,

那就加入proxy_support然后operner改為 ,如下:

4.偽裝成瀏覽器訪問(wèn)

某些網(wǎng)站反感爬蟲(chóng)的到訪,于是對(duì)爬蟲(chóng)一律拒絕請(qǐng)求。

這時(shí)候我們需要偽裝成瀏覽器,

這可以通過(guò)修改http包中的header來(lái)實(shí)現(xiàn):

如果你在學(xué)習(xí)Python的過(guò)程中遇見(jiàn)了很多疑問(wèn)和難題,可以加-q-u-n???227 -435-450里面有軟件視頻資料免費(fèi)領(lǐng)取

5、頁(yè)面解析

對(duì)于頁(yè)面解析最強(qiáng)大的當(dāng)然是正則表達(dá)式,

這個(gè)對(duì)于不同網(wǎng)站不同的使用者都不一樣,就不用過(guò)多的說(shuō)明。

其次就是解析庫(kù)了,常用的有兩個(gè)lxml和BeautifulSoup。

對(duì)于這兩個(gè)庫(kù),我的評(píng)價(jià)是,

都是HTML/XML的處理庫(kù),Beautifulsoup純python實(shí)現(xiàn),效率低,

但是功能實(shí)用,比如能用通過(guò)結(jié)果搜索獲得某個(gè)HTML節(jié)點(diǎn)的源碼;

lxmlC語(yǔ)言編碼,高效,支持Xpath。

6.驗(yàn)證碼的處理

碰到驗(yàn)證碼咋辦?

這里分兩種情況處理:

google那種驗(yàn)證碼,沒(méi)辦法。

簡(jiǎn)單的驗(yàn)證碼:字符個(gè)數(shù)有限,只使用了簡(jiǎn)單的平移或旋轉(zhuǎn)加噪音而沒(méi)有扭曲的,

這種還是有可能可以處理的,一般思路是旋轉(zhuǎn)的轉(zhuǎn)回來(lái),噪音去掉,

然后劃分單個(gè)字符,劃分好了以后再通過(guò)特征提取的方法(例如PCA)降維并生成特征庫(kù),

然后把驗(yàn)證碼和特征庫(kù)進(jìn)行比較。

這個(gè)比較復(fù)雜,這里就不展開(kāi)了,

具體做法請(qǐng)弄本相關(guān)教科書(shū)好好研究一下。

7. gzip/deflate支持

現(xiàn)在的網(wǎng)頁(yè)普遍支持gzip壓縮,這往往可以解決大量傳輸時(shí)間,

以VeryCD的主頁(yè)為例,未壓縮版本247K,壓縮了以后45K,為原來(lái)的1/5。

這就意味著抓取速度會(huì)快5倍。

然而python的urllib/urllib2默認(rèn)都不支持壓縮

要返回壓縮格式,必須在request的header里面寫(xiě)明’accept-encoding’,

然后讀取response后更要檢查header查看是否有’content-encoding’一項(xiàng)來(lái)判斷是否需要解碼,很繁瑣瑣碎。

如何讓urllib2自動(dòng)支持gzip, defalte呢?

其實(shí)可以繼承BaseHanlder類,

然后build_opener的方式來(lái)處理:

8、多線程并發(fā)抓取

單線程太慢的話,就需要多線程了,

這里給個(gè)簡(jiǎn)單的線程池模板 這個(gè)程序只是簡(jiǎn)單地打印了1-10,

但是可以看出是并發(fā)的。

雖然說(shuō)Python的多線程很雞肋

但是對(duì)于爬蟲(chóng)這種網(wǎng)絡(luò)頻繁型,

還是能一定程度提高效率的。

9. 總結(jié)

閱讀Python編寫(xiě)的代碼感覺(jué)像在閱讀英語(yǔ)一樣,這讓使用者可以專注于解決問(wèn)題而不是去搞明白語(yǔ)言本身。

Python雖然是基于C語(yǔ)言編寫(xiě),但是摒棄了C中復(fù)雜的指針,使其變得簡(jiǎn)明易學(xué)。

并且作為開(kāi)源軟件,Python允許對(duì)代碼進(jìn)行閱讀,拷貝甚至改進(jìn)。

這些性能成就了Python的高效率,有“人生苦短,我用Python”之說(shuō),是一種十分精彩又強(qiáng)大的語(yǔ)言。

總而言之,開(kāi)始學(xué)Python一定要注意這4點(diǎn):

1.代碼規(guī)范,這本身就是一個(gè)非常好的習(xí)慣,如果開(kāi)始不養(yǎng)好好的代碼規(guī)劃,以后會(huì)很痛苦。

2.多動(dòng)手,少看書(shū),很多人學(xué)Python就一味的看書(shū),這不是學(xué)數(shù)學(xué)物理,你看例題可能就會(huì)了,學(xué)習(xí)Python主要是學(xué)習(xí)編程思想。

3.勤練習(xí),學(xué)完新的知識(shí)點(diǎn),一定要記得如何去應(yīng)用,不然學(xué)完就會(huì)忘,學(xué)我們這行主要都是實(shí)際操作。

4.學(xué)習(xí)要有效率,如果自己都覺(jué)得效率非常低,那就停不停,找一下原因,去問(wèn)問(wèn)過(guò)來(lái)人這是為什么。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,039評(píng)論 25 709
  • 在科技飛速更新發(fā)展的今天,社交方式也有很多種,但最近最火的要數(shù)微信!就像我父母這樣很少使用社交軟件的人,也學(xué)會(huì)了怎...
    請(qǐng)跟我聯(lián)駱閱讀 231評(píng)論 0 1
  • 昨天晚上翻出之前在畫(huà)畫(huà)孫老師班上畫(huà)的動(dòng)漫,又開(kāi)始繪畫(huà)。 還是更喜歡黑白的喵 繪畫(huà),是一個(gè)人的旅行。
    Clara喵閱讀 244評(píng)論 1 2

友情鏈接更多精彩內(nèi)容