Python爬蟲入門,8個常用爬蟲技巧盤點

智雲程式設計發表於2018-12-12

程式設計對於任何一個新手來說都不是一件容易的事情,Python對於任何一個想學習的程式設計的人來說的確是一個福音,閱讀Python程式碼像是在閱讀文章,源於Python語言提供了非常優雅的語法,被稱為最優雅的語言之一。



python入門時


用得最多的還是各類爬蟲指令碼,


寫過抓代理本機驗證的指令碼、寫過論壇中自動登入自動發貼的指令碼


寫過自動收郵件的指令碼、寫過簡單的驗證碼識別的指令碼。


這些指令碼有一個共性,都是和web相關的,


總要用到獲取連結的一些方法,故累積了不少爬蟲抓站的經驗,


在此總結一下,那麼以後做東西也就不用重複勞動了。


很多時候跟著書和網站查詢資料學習,會發現沒有目標,學了很多卻不知道自己到底能夠做出什麼成績。要有一個清晰的職業學習規劃,學習過程中會遇到很多問題,你可以到我們的 python學習交流群【 784758214 】,基礎,進階。從企業招聘人才需求 到怎麼學習python,和學習什麼內容都有免費系統分享,讓你無論是自學還是找相應的培訓都能讓你少走彎路。希望可以幫助你快速瞭解Python,學習python


1、基本抓取網頁


get方法



post方法



2.使用代理伺服器


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


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



3.Cookies處理



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


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



4.偽裝成瀏覽器訪問


某些網站反感爬蟲的到訪,於是對爬蟲一律拒絕請求。


這時候我們需要偽裝成瀏覽器,


這可以透過修改http包中的header來實現:



5、頁面解析


對於頁面解析最強大的當然是正規表示式,


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



其次就是解析庫了,常用的有兩個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的方式來處理:



8、多執行緒併發抓取


單執行緒太慢的話,就需要多執行緒了,


這裡給個簡單的執行緒池模板 這個程式只是簡單地列印了1-10,


但是可以看出是併發的。


雖然說Python的多執行緒很雞肋


但是對於爬蟲這種網路頻繁型,


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



9. 總結


閱讀Python編寫的程式碼感覺像在閱讀英語一樣,這讓使用者可以專注於解決問題而不是去搞明白語言本身。


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


並且作為開源軟體,Python允許對程式碼進行閱讀,複製甚至改進。


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


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


  1. 程式碼規範,這本身就是一個非常好的習慣,如果開始不養好好的程式碼規劃,以後會很痛苦。


2.多動手,少看書,很多人學Python就一味的看書,這不是學數學物理,你看例題可能就會了,學習Python主要是學習程式設計思想。


3.勤練習,學完新的知識點,一定要記得如何去應用,不然學完就會忘,學我們這行主要都是實際操作。


4.學習要有效率,如果自己都覺得效率非常低,那就停不停,找一下原因,去問問過來人這是為什麼。


Python學習交流群【 784758214 】希望可以幫助你快速瞭解Python,學習python



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69901074/viewspace-2285025/,如需轉載,請註明出處,否則將追究法律責任。

相關文章