Python爬蟲入門,8個(gè)常用(yòng)爬蟲技巧盤點

2018-12-20

編程對(duì)于任何一個(gè)新手來(lái)說都不是一件容易的(de)事情,Python對(duì)于任何一個(gè)想學習(xí)的(de)編程的(de)人(rén)來(lái)說的(de)确是一個(gè)福音(yīn),閱讀Python代碼像是在閱讀文章(zhāng),源于Python語言提供了(le)非常優


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


微信圖片_20181220164414.jpg


python入門時(shí)


用(yòng)得(de)最多(duō)的(de)還(hái)是各類爬蟲腳本,


寫過抓代理(lǐ)本機驗證的(de)腳本、寫過論壇中自動登錄自動發貼的(de)腳本


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


這(zhè)些腳本有一個(gè)共性,都是和(hé)web相關的(de),


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


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


很多(duō)時(shí)候跟著(zhe)書(shū)和(hé)網站查找資料學習(xí),會發現沒有目标,學了(le)很多(duō)卻不知道自己到底能夠做(zuò)出什(shén)麽成績。要有一個(gè)清晰的(de)職業學習(xí)規劃,學習(xí)過程中會遇到很多(duō)問題,你可(kě)以到我


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


你少走彎路。希望可(kě)以幫助你快(kuài)速了(le)解Python,學習(xí)python


1、基本抓取網頁


get方法


微信圖片_20181220164422.jpg


post方法


微信圖片_20181220164423.jpg


2.使用(yòng)代理(lǐ)服務器


這(zhè)在某些情況下(xià)比較有用(yòng),


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


微信圖片_20181220164424.jpg


3.Cookies處理(lǐ)


微信圖片_20181220164425.jpg


是的(de)沒錯,如果想同時(shí)用(yòng)代理(lǐ)和(hé)cookie,


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


微信圖片_20181220164426.jpg


4.僞裝成浏覽器訪問


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


這(zhè)時(shí)候我們需要僞裝成浏覽器,


這(zhè)可(kě)以通(tōng)過修改http包中的(de)header來(lái)實現:


微信圖片_20181220164428.jpg


5、頁面解析


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


這(zhè)個(gè)對(duì)于不同網站不同的(de)使用(yòng)者都不一樣,就不用(yòng)過多(duō)的(de)說明(míng)。


微信圖片_20181220164429.jpg


其次就是解析庫了(le),常用(yòng)的(de)有兩個(gè)lxml和(hé)BeautifulSoup。


對(duì)于這(zhè)兩個(gè)庫,我的(de)評價是,


都是HTML/XML的(de)處理(lǐ)庫,Beautifulsoup純python實現,效率低,


但是功能實用(yòng),比如能用(yòng)通(tōng)過結果搜索獲得(de)某個(gè)HTML節點的(de)源碼;


lxmlC語言編碼,高(gāo)效,支持Xpath。


6.驗證碼的(de)處理(lǐ)


碰到驗證碼咋辦?


這(zhè)裏分(fēn)兩種情況處理(lǐ):


google那種驗證碼,沒辦法。


簡單的(de)驗證碼:字符個(gè)數有限,隻使用(yòng)了(le)簡單的(de)平移或旋轉加噪音(yīn)而沒有扭曲的(de),


這(zhè)種還(hái)是有可(kě)能可(kě)以處理(lǐ)的(de),一般思路是旋轉的(de)轉回來(lái),噪音(yīn)去掉,


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


然後把驗證碼和(hé)特征庫進行比較。


這(zhè)個(gè)比較複雜(zá),這(zhè)裏就不展開了(le),


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


7. gzip/deflate支持


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


以VeryCD的(de)主頁爲例,未壓縮版本247K,壓縮了(le)以後45K,爲原來(lái)的(de)1/5。


這(zhè)就意味著(zhe)抓取速度會快(kuài)5倍。


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


要返回壓縮格式,必須在request的(de)header裏面寫明(míng)’accept-encoding’,


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


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


其實可(kě)以繼承BaseHanlder類,


然後build_opener的(de)方式來(lái)處理(lǐ):


微信圖片_20181220164431.jpg


8、多(duō)線程并發抓取


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


這(zhè)裏給個(gè)簡單的(de)線程池模闆 這(zhè)個(gè)程序隻是簡單地打印了(le)1-10,


但是可(kě)以看出是并發的(de)。


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


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


還(hái)是能一定程度提高(gāo)效率的(de)。


微信圖片_20181220164432.jpg


9. 總結


閱讀Python編寫的(de)代碼感覺像在閱讀英語一樣,這(zhè)讓使用(yòng)者可(kě)以專注于解決問題而不是去搞明(míng)白語言本身。


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


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


這(zhè)些性能成就了(le)Python的(de)高(gāo)效率,有“人(rén)生苦短,我用(yòng)Python”之說,是一種十分(fēn)精彩又強大(dà)的(de)語言。


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


1.代碼規範,這(zhè)本身就是一個(gè)非常好的(de)習(xí)慣,如果開始不養好好的(de)代碼規劃,以後會很痛苦。


2.多(duō)動手,少看書(shū),很多(duō)人(rén)學Python就一味的(de)看書(shū),這(zhè)不是學數學物(wù)理(lǐ),你看例題可(kě)能就會了(le),學習(xí)Python主要是學習(xí)編程思想。


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


4.學習(xí)要有效率,如果自己都覺得(de)效率非常低,那就停不停,找一下(xià)原因,去問問過來(lái)人(rén)這(zhè)是爲什(shén)麽。


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

*請認真填寫需求,我們會在24小時(shí)内與您取得(de)聯系。