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

2018-12-20

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


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


微信圖片_20181220164414.jpg


python入門時


用得最多的還(hái)是各類爬蟲腳本,


寫過(guò)抓代理本機驗證的腳本、寫過(guò)論壇中自動登錄自動發(fā)貼的腳本


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


這(zhè)些腳本有一個共性,都(dōu)是和web相關的,


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


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


很多時候跟着書和網站查找資料學(xué)習,會發(fā)現沒(méi)有目标,學(xué)了很多卻不知道(dào)自己到底能(néng)夠做出什麼(me)成(chéng)績。要有一個清晰的職業學(xué)習規劃,學(xué)習過(guò)程中會遇到很多問題,你可以到我


們的 python學(xué)習交流群【 784758214 】,基礎,進(jìn)階。從企業招聘人才需求 到怎麼(me)學(xué)習python,和學(xué)習什麼(me)内容都(dōu)有免費系統分享,讓你無論是自學(xué)還(hái)是找相應的培訓都(dōu)能(néng)讓


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


1、基本抓取網頁


get方法


微信圖片_20181220164422.jpg


post方法


微信圖片_20181220164423.jpg


2.使用代理服務器


這(zhè)在某些情況下比較有用,


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


微信圖片_20181220164424.jpg


3.Cookies處理


微信圖片_20181220164425.jpg


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


那就加入proxy_support然後(hòu)operner改爲 ,如下:


微信圖片_20181220164426.jpg


4.僞裝成(chéng)浏覽器訪問


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


這(zhè)時候我們需要僞裝成(chéng)浏覽器,


這(zhè)可以通過(guò)修改http包中的header來實現:


微信圖片_20181220164428.jpg


5、頁面(miàn)解析


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


這(zhè)個對(duì)于不同網站不同的使用者都(dōu)不一樣,就不用過(guò)多的說明。


微信圖片_20181220164429.jpg


其次就是解析庫了,常用的有兩(liǎng)個lxml和BeautifulSoup。


對(duì)于這(zhè)兩(liǎng)個庫,我的評價是,


都(dōu)是HTML/XML的處理庫,Beautifulsoup純python實現,效率低,


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


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


6.驗證碼的處理


碰到驗證碼咋辦?


這(zhè)裡(lǐ)分兩(liǎng)種(zhǒng)情況處理:


google那種(zhǒng)驗證碼,沒(méi)辦法。


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


這(zhè)種(zhǒng)還(hái)是有可能(néng)可以處理的,一般思路是旋轉的轉回來,噪音去掉,


然後(hòu)劃分單個字符,劃分好(hǎo)了以後(hòu)再通過(guò)特征提取的方法(例如PCA)降維并生成(chéng)特征庫,


然後(hòu)把驗證碼和特征庫進(jìn)行比較。


這(zhè)個比較複雜,這(zhè)裡(lǐ)就不展開(kāi)了,


具體做法請弄本相關教科書好(hǎo)好(hǎo)研究一下。


7. gzip/deflate支持


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


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


這(zhè)就意味着抓取速度會快5倍。


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


要返回壓縮格式,必須在request的header裡(lǐ)面(miàn)寫明’accept-encoding’,


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


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


其實可以繼承BaseHanlder類,


然後(hòu)build_opener的方式來處理:


微信圖片_20181220164431.jpg


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


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


這(zhè)裡(lǐ)給個簡單的線程池模闆 這(zhè)個程序隻是簡單地打印了1-10,


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


雖然說Python的多線程很雞肋


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


還(hái)是能(néng)一定程度提高效率的。


微信圖片_20181220164432.jpg


9. 總結


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


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


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


這(zhè)些性能(néng)成(chéng)就了Python的高效率,有“人生苦短,我用Python”之說,是一種(zhǒng)十分精彩又強大的語言。


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


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


2.多動手,少看書,很多人學(xué)Python就一味的看書,這(zhè)不是學(xué)數學(xué)物理,你看例題可能(néng)就會了,學(xué)習Python主要是學(xué)習編程思想。


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


4.學(xué)習要有效率,如果自己都(dōu)覺得效率非常低,那就停不停,找一下原因,去問問過(guò)來人這(zhè)是爲什麼(me)。


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

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