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)語言之一。
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方法
post方法
2.使用(yòng)代理(lǐ)服務器
這(zhè)在某些情況下(xià)比較有用(yòng),
比如IP被封了(le),或者比如IP訪問的(de)次數受到限制等等。
3.Cookies處理(lǐ)
是的(de)沒錯,如果想同時(shí)用(yòng)代理(lǐ)和(hé)cookie,
那就加入proxy_support然後operner改爲 ,如下(xià):
4.僞裝成浏覽器訪問
某些網站反感爬蟲的(de)到訪,于是對(duì)爬蟲一律拒絕請求。
這(zhè)時(shí)候我們需要僞裝成浏覽器,
這(zhè)可(kě)以通(tōng)過修改http包中的(de)header來(lái)實現:
5、頁面解析
對(duì)于頁面解析最強大(dà)的(de)當然是正則表達式,
這(zhè)個(gè)對(duì)于不同網站不同的(de)使用(yòng)者都不一樣,就不用(yòng)過多(duō)的(de)說明(míng)。
其次就是解析庫了(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ǐ):
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)。
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)麽。
*請認真填寫需求,我們會在24小時(shí)内與您取得(de)聯系。