8個常用Python爬蟲技巧盤點,看看你知道多少?

2021-10-10 20:19:03 字數 2252 閱讀 5304

python入門時,用得最多的還是各類爬蟲指令碼,寫過抓**本機驗證的指令碼、寫過論壇中自動登入自動發貼的指令碼,寫過自動收郵件的指令碼、寫過簡單的驗證碼識別的指令碼。這些指令碼有乙個共性,都是和web相關的,總要用到獲取鏈結的一些方法,故累積了不少爬蟲抓站的經驗,在此總結一下,那麼以後做東西也就不用重複勞動了。

get方法

post方法

這在某些情況下比較有用,比如ip被封了,或者比如ip訪問的次數受到限制等等。

是的沒錯,如果想同時用**和cookie,那就加入proxy_support然後operner改為 ,如下:

某些**反感爬蟲的到訪,於是對爬蟲一律拒絕請求。這時候我們需要偽裝成瀏覽器,

這可以通過修改http包中的header來實現:

對於頁面解析最強大的當然是正規表示式,這個對於不同**不同的使用者都不一樣,就不用過多的說明。

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

對於這兩個庫,我的評價是,都是html/xml的處理庫,beautifulsoup純python實現,效率低,但是功能實用,比如能用通過結果搜尋獲得某個html節點的原始碼;lxmlc語言編碼,高效,支援xpath。

碰到驗證碼咋辦?這裡分兩種情況處理:

google那種驗證碼,沒辦法。簡單的驗證碼:字元個數有限,只使用了簡單的平移或旋轉加噪音而沒有扭曲的,這種還是有可能可以處理的,一般思路是旋轉的轉回來,噪音去掉,然後劃分單個字元,劃分好了以後再通過特徵提取的方法(例如pca)降維並生成特徵庫,然後把驗證碼和特徵庫進行比較。這個比較複雜,這裡就不展開了,具體做法請弄本相關教科書好好研究一下。

現在的網頁普遍支援gzip壓縮,這往往可以解決大量傳輸時間,以verycd的主頁為例,未壓縮版本247k,壓縮了以後45k,為原來的1/5。這就意味著抓取速度會快5倍。

然而python的urllib/urllib2預設都不支援壓縮,要返回壓縮格式,必須在request的header裡面寫明』accept-encoding』,然後讀取response後更要檢查header檢視是否有』content-encoding』一項來判斷是否需要解碼,很繁瑣瑣碎。如何讓urllib2自動支援gzip, defalte呢?

其實可以繼承basehanlder類,然後build_opener的方式來處理:

單執行緒太慢的話,就需要多執行緒了,這裡給個簡單的執行緒池模板 這個程式只是簡單地列印了1-10,但是可以看出是併發的。

雖然說python的多執行緒很雞肋,但是對於爬蟲這種網路頻繁型,還是能一定程度提高效率的。

閱讀python編寫的**感覺像在閱讀英語一樣,這讓使用者可以專注於解決問題而不是去搞明白語言本身。

python雖然是基於c語言編寫,但是摒棄了c中複雜的指標,使其變得簡明易學。並且作為開源軟體,python允許對**進行閱讀,拷貝甚至改進。這些效能成就了python的高效率,有「人生苦短,我用python」之說,是一種十分精彩又強大的語言。

總而言之,開始學python一定要注意這4點:

1.**規範,這本身就是乙個非常好的習慣,如果開始不養好好的**規劃,以後會很痛苦。

2.多動手,少看書,很多人學python就一味的看書,這不是學數學物理,你看例題可能就會了,學習python主要是學習程式設計思想。

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

4.學習要有效率,如果自己都覺得效率非常低,那就停不停,找一下原因,去問問過來人這是為什麼。

8個SQL語句常用優化技巧

要提高sql語句的執行效率,最常見的方法就是建立索引,以及盡量避免全表掃瞄。在本章mysql教程中,uncletoo給大家整理一些常見的sql優化技巧,避免全表掃瞄。乙個簡單的優化,也許能讓你的sql執行效率提高幾倍,甚至幾十倍。1 避免在where子句中使用 is null 或 is not nu...

8個SQL語句常用優化技巧

要提高sql語句的執行效率,最常見的方法就是建立索引,以及盡量避免全表掃瞄。在本章mysql教程中,uncletoo給大家整理一些 常見的sql 優化技巧 避免全表掃瞄。乙個簡單的優化,也許能讓你的sql執行效率提高幾倍,甚至幾十倍。1 避免在where子句中使用 is null 或 is not ...

8個SQL語句常用優化技巧

要提高sql語句的執行效率,最常見的方法就是建立索引,以及盡量避免全表掃瞄。在本章mysql教程中,整理一些常見的sql優化技巧,避免全表掃瞄。乙個簡單的優化,也許能讓你的sql執行效率提高幾倍,甚至幾十倍。1 避免在where子句中使用 is null 或 is not null 對欄位進行判斷。...