帶你入門Python爬蟲,8個經常使用爬蟲技巧盤點

python做爲一門高級編程語言,它的定位是優雅、明確和簡單。python

我學用python差很少一年時間了,web

用得最多的仍是各種爬蟲腳本,正則表達式

寫過抓代理本機驗證的腳本、寫過論壇中自動登陸自動發貼的腳本編程

寫過自動收郵件的腳本、寫過簡單的驗證碼識別的腳本。瀏覽器

帶你入門Python爬蟲,8個經常使用爬蟲技巧盤點

 

這些腳本有一個共性,都是和web相關的,服務器

總要用到獲取連接的一些方法,故累積了很多爬蟲抓站的經驗,cookie

在此總結一下,那麼之後作東西也就不用重複勞動了。網絡

若是你在學習Python的過程當中碰見了不少疑問和難題,能夠加-q-u-n   227 -435-450裏面有軟件視頻資料免費領取多線程

一、基本抓取網頁

get方法併發

帶你入門Python爬蟲,8個經常使用爬蟲技巧盤點

 

post方法

帶你入門Python爬蟲,8個經常使用爬蟲技巧盤點

 

2.使用代理服務器

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

好比IP被封了,或者好比IP訪問的次數受到限制等等。

帶你入門Python爬蟲,8個經常使用爬蟲技巧盤點

 

3.Cookies處理

帶你入門Python爬蟲,8個經常使用爬蟲技巧盤點

 

是的沒錯,若是想同時用代理和cookie,

那就加入proxy_support而後operner改成 ,以下:

帶你入門Python爬蟲,8個經常使用爬蟲技巧盤點

 

4.假裝成瀏覽器訪問

某些網站反感爬蟲的到訪,因而對爬蟲一概拒絕請求。

這時候咱們須要假裝成瀏覽器,

這能夠經過修改http包中的header來實現:

帶你入門Python爬蟲,8個經常使用爬蟲技巧盤點

 

五、頁面解析

對於頁面解析最強大的固然是正則表達式,

這個對於不一樣網站不一樣的使用者都不同,就不用過多的說明。

帶你入門Python爬蟲,8個經常使用爬蟲技巧盤點

 

其次就是解析庫了,經常使用的有兩個lxml和BeautifulSoup。

對於這兩個庫,個人評價是,

都是HTML/XML的處理庫,Beautifulsoup純python實現,效率低,

可是功能實用,好比能用經過結果搜索得到某個HTML節點的源碼;

lxmlC語言編碼,高效,支持Xpath。

6.驗證碼的處理

碰到驗證碼咋辦?

這裏分兩種狀況處理:

google那種驗證碼,沒辦法。

簡單的驗證碼:字符個數有限,只使用了簡單的平移或旋轉加噪音而沒有扭曲的,

這種仍是有可能能夠處理的,通常思路是旋轉的轉回來,噪音去掉,

而後劃分單個字符,劃分好了之後再經過特徵提取的方法(例如PCA)降維並生成特徵庫,

而後把驗證碼和特徵庫進行比較。

這個比較複雜,這裏就不展開了,

具體作法請弄本相關教科書好好研究一下。

7. gzip/deflate支持

如今的網頁廣泛支持gzip壓縮,這每每能夠解決大量傳輸時間,

以VeryCD的主頁爲例,未壓縮版本247K,壓縮了之後45K,爲原來的1/5。

這就意味着抓取速度會快5倍。

然而python的urllib/urllib2默認都不支持壓縮

要返回壓縮格式,必須在request的header裏面寫明’accept-encoding’,

而後讀取response後更要檢查header查看是否有’content-encoding’一項來判斷是否須要解碼,很繁瑣瑣碎。

如何讓urllib2自動支持gzip, defalte呢?

其實能夠繼承BaseHanlder類,

而後build_opener的方式來處理:

帶你入門Python爬蟲,8個經常使用爬蟲技巧盤點

 

八、多線程併發抓取

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

這裏給個簡單的線程池模板 這個程序只是簡單地打印了1-10,

可是能夠看出是併發的。

雖說Python的多線程很雞肋

可是對於爬蟲這種網絡頻繁型,

仍是能必定程度提升效率的。

帶你入門Python爬蟲,8個經常使用爬蟲技巧盤點

 

9. 總結

閱讀Python編寫的代碼感受像在閱讀英語同樣,這讓使用者能夠專一於解決問題而不是去搞明白語言自己。

Python雖然是基於C語言編寫,可是摒棄了C中複雜的指針,使其變得簡明易學。

而且做爲開源軟件,Python容許對代碼進行閱讀,拷貝甚至改進。

這些性能成就了Python的高效率,有「人生苦短,我用Python」之說,是一種十分精彩又強大的語言。

總而言之,開始學Python必定要注意這4點:

  1. 代碼規範,這自己就是一個很是好的習慣,若是開始不養好好的代碼規劃,之後會很痛苦。
  2. 多動手,少看書,不少人學Python就一味的看書,這不是學數學物理,你看例題可能就會了,學習Python主要是學習編程思想。
  3. 勤練習,學完新的知識點,必定要記得如何去應用,否則學完就會忘,學咱們這行主要都是實際操做。
  4. 學習要有效率,若是本身都以爲效率很是低,那就停不停,找一下緣由,去問問過來人這是爲何。
相關文章
相關標籤/搜索