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

2018-12-20

編程對于任何一(yī)個新手來說都不是一(yī)件容易的事情,Python對于任何一(yī)個想學習的編程的人來說的确是一(yī)個福音,閱讀Python代碼像是在閱讀文章,源于Python語言提供了非常優


雅的語法,被稱爲最優雅的語言之一(yī)。


微信圖片_20181220164414.jpg


python入門時


用得最多的還是各類爬蟲腳本,


寫過抓代理本機驗證的腳本、寫過論壇中(zhōng)自動登錄自動發貼的腳本


寫過自動收郵件的腳本、寫過簡單的驗證碼識别的腳本。


這些腳本有一(yī)個共性,都是和web相關的,


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


在此總結一(yī)下(xià),那麽以後做東西也就不用重複勞動了。


很多時候跟着書(shū)和網站查找資(zī)料學習,會發現沒有目标,學了很多卻不知(zhī)道自己到底能夠做出什麽成績。要有一(yī)個清晰的職業學習規劃,學習過程中(zhōng)會遇到很多問題,你可以到我(wǒ)


們的 python學習交流群【 784758214 】,基礎,進階。從企業招聘人才需求 到怎麽學習python,和學習什麽内容都有免費(fèi)系統分(fēn)享,讓你無論是自學還是找相應的培訓都能讓


你少走彎路。希望可以幫助你快速了解Python,學習python


1、基本抓取網頁


get方法


微信圖片_20181220164422.jpg


post方法


微信圖片_20181220164423.jpg


2.使用代理服務器


這在某些情況下(xià)比較有用,


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


微信圖片_20181220164424.jpg


3.Cookies處理


微信圖片_20181220164425.jpg


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


那就加入proxy_support然後operner改爲 ,如下(xià):


微信圖片_20181220164426.jpg


4.僞裝成浏覽器訪問


某些網站反感爬蟲的到訪,于是對爬蟲一(yī)律拒絕請求。


這時候我(wǒ)們需要僞裝成浏覽器,


這可以通過修改http包中(zhōng)的header來實現:


微信圖片_20181220164428.jpg


5、頁面解析


對于頁面解析最強大(dà)的當然是正則表達式,


這個對于不同網站不同的使用者都不一(yī)樣,就不用過多的說明。


微信圖片_20181220164429.jpg


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


對于這兩個庫,我(wǒ)的評價是,


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


但是功能實用,比如能用通過結果搜索獲得某個HTML節點的源碼;


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


6.驗證碼的處理


碰到驗證碼咋辦?


這裏分(fēn)兩種情況處理:


google那種驗證碼,沒辦法。


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


這種還是有可能可以處理的,一(yī)般思路是旋轉的轉回來,噪音去(qù)掉,


然後劃分(fēn)單個字符,劃分(fēn)好了以後再通過特征提取的方法(例如PCA)降維并生(shēng)成特征庫,


然後把驗證碼和特征庫進行比較。


這個比較複雜(zá),這裏就不展開(kāi)了,


具體(tǐ)做法請弄本相關教科書(shū)好好研究一(yī)下(xià)。


7. gzip/deflate支持


現在的網頁普遍支持gzip壓縮,這往往可以解決大(dà)量傳輸時間,


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


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


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


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


然後讀取response後更要檢查header查看是否有’content-encoding’一(yī)項來判斷是否需要解碼,很繁瑣瑣碎。


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


其實可以繼承BaseHanlder類,


然後build_opener的方式來處理:


微信圖片_20181220164431.jpg


8、多線程并發抓取


單線程太慢(màn)的話(huà),就需要多線程了,


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


但是可以看出是并發的。


雖然說Python的多線程很雞肋


但是對于爬蟲這種網絡頻(pín)繁型,


還是能一(yī)定程度提高效率的。


微信圖片_20181220164432.jpg


9. 總結


閱讀Python編寫的代碼感覺像在閱讀英語一(yī)樣,這讓使用者可以專注于解決問題而不是去(qù)搞明白(bái)語言本身。


Python雖然是基于C語言編寫,但是摒棄了C中(zhōng)複雜(zá)的指針,使其變得簡明易學。


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


這些性能成就了Python的高效率,有“人生(shēng)苦短,我(wǒ)用Python”之說,是一(yī)種十分(fēn)精彩又(yòu)強大(dà)的語言。


總而言之,開(kāi)始學Python一(yī)定要注意這4點:


1.代碼規範,這本身就是一(yī)個非常好的習慣,如果開(kāi)始不養好好的代碼規劃,以後會很痛苦。


2.多動手,少看書(shū),很多人學Python就一(yī)味的看書(shū),這不是學數學物(wù)理,你看例題可能就會了,學習Python主要是學習編程思想。


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


4.學習要有效率,如果自己都覺得效率非常低,那就停不停,找一(yī)下(xià)原因,去(qù)問問過來人這是爲什麽。


您的項目需求咨詢熱線:0760-88610046(國家高新技術企業)

*請認真填寫需求,我(wǒ)們會在24小(xiǎo)時内與您取得聯系。