python作為一門高級編程語言酥馍,它的定位是優(yōu)雅辩昆、明確和簡單。
我學用python差不多一年時間了物喷,
用得最多的還是各類爬蟲腳本卤材,
寫過抓代理本機驗證的腳本、寫過論壇中自動登錄自動發(fā)貼的腳本
寫過自動收郵件的腳本峦失、寫過簡單的驗證碼識別的腳本扇丛。
這些腳本有一個共性,都是和web相關(guān)的尉辑,
總要用到獲取鏈接的一些方法帆精,故累積了不少爬蟲抓站的經(jīng)驗,
在此總結(jié)一下隧魄,那么以后做東西也就不用重復勞動了卓练。
如果你在學習Python的過程中遇見了很多疑問和難題,可以加-q-u-n???227 -435-450里面有軟件視頻資料免費領(lǐng)取
1购啄、基本抓取網(wǎng)頁
get方法
post方法
2.使用代理服務(wù)器
這在某些情況下比較有用襟企,
比如IP被封了,或者比如IP訪問的次數(shù)受到限制等等狮含。
3.Cookies處理
是的沒錯顽悼,如果想同時用代理和cookie,
那就加入proxy_support然后operner改為 几迄,如下:
4.偽裝成瀏覽器訪問
某些網(wǎng)站反感爬蟲的到訪蔚龙,于是對爬蟲一律拒絕請求。
這時候我們需要偽裝成瀏覽器映胁,
這可以通過修改http包中的header來實現(xiàn):
如果你在學習Python的過程中遇見了很多疑問和難題木羹,可以加-q-u-n???227 -435-450里面有軟件視頻資料免費領(lǐng)取
5、頁面解析
對于頁面解析最強大的當然是正則表達式解孙,
這個對于不同網(wǎng)站不同的使用者都不一樣坑填,就不用過多的說明。
其次就是解析庫了弛姜,常用的有兩個lxml和BeautifulSoup穷遂。
對于這兩個庫,我的評價是娱据,
都是HTML/XML的處理庫蚪黑,Beautifulsoup純python實現(xiàn)盅惜,效率低,
但是功能實用忌穿,比如能用通過結(jié)果搜索獲得某個HTML節(jié)點的源碼抒寂;
lxmlC語言編碼,高效掠剑,支持Xpath屈芜。
6.驗證碼的處理
碰到驗證碼咋辦?
這里分兩種情況處理:
google那種驗證碼朴译,沒辦法井佑。
簡單的驗證碼:字符個數(shù)有限,只使用了簡單的平移或旋轉(zhuǎn)加噪音而沒有扭曲的眠寿,
這種還是有可能可以處理的躬翁,一般思路是旋轉(zhuǎn)的轉(zhuǎn)回來,噪音去掉盯拱,
然后劃分單個字符盒发,劃分好了以后再通過特征提取的方法(例如PCA)降維并生成特征庫,
然后把驗證碼和特征庫進行比較狡逢。
這個比較復雜宁舰,這里就不展開了,
具體做法請弄本相關(guān)教科書好好研究一下奢浑。
7. gzip/deflate支持
現(xiàn)在的網(wǎng)頁普遍支持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、多線程并發(fā)抓取
單線程太慢的話钢拧,就需要多線程了蟹漓,
這里給個簡單的線程池模板 這個程序只是簡單地打印了1-10,
但是可以看出是并發(fā)的源内。
雖然說Python的多線程很雞肋
但是對于爬蟲這種網(wǎng)絡(luò)頻繁型葡粒,
還是能一定程度提高效率的。
9. 總結(jié)
閱讀Python編寫的代碼感覺像在閱讀英語一樣,這讓使用者可以專注于解決問題而不是去搞明白語言本身嗽交。
Python雖然是基于C語言編寫卿嘲,但是摒棄了C中復雜的指針,使其變得簡明易學夫壁。
并且作為開源軟件拾枣,Python允許對代碼進行閱讀,拷貝甚至改進盒让。
這些性能成就了Python的高效率梅肤,有“人生苦短,我用Python”之說邑茄,是一種十分精彩又強大的語言姨蝴。
總而言之,開始學Python一定要注意這4點:
1.代碼規(guī)范撩扒,這本身就是一個非常好的習慣似扔,如果開始不養(yǎng)好好的代碼規(guī)劃,以后會很痛苦搓谆。
2.多動手炒辉,少看書,很多人學Python就一味的看書泉手,這不是學數(shù)學物理黔寇,你看例題可能就會了,學習Python主要是學習編程思想斩萌。
3.勤練習缝裤,學完新的知識點,一定要記得如何去應(yīng)用颊郎,不然學完就會忘憋飞,學我們這行主要都是實際操作。
4.學習要有效率姆吭,如果自己都覺得效率非常低榛做,那就停不停,找一下原因内狸,去問問過來人這是為什么检眯。