爬蟲用久了,總是會被封的。——魯迅
有些**,特別是一些陳年老站,沒有做過反爬蟲機制的,我們可以盡情地爬,愉快地爬,把它們的**。。資料全都爬下來。最多出於情懷考慮,我們爬慢一點,不給它的伺服器太大壓力。但是對於有反爬蟲機制的**,我們不能這樣。
最簡單的反爬蟲機制應該是u-a校驗了。瀏覽器在傳送請求的時候,會附帶一部分瀏覽器及當前系統環境的引數給伺服器,這部分資料放在http請求的header部分。
我們要做的就是通過requests庫設定我們的爬蟲u-a。一般來說第三方庫傳送請求會有乙個預設的u-a,如果我們直接用這個u-a,就等於直接告訴別人,我就是爬蟲,快來禁我!有些**如果不設定u-a是上不去的。requests庫設定u-a也很簡單。
def當然我們如果反覆訪問同乙個**,卻一直使用同乙個u-a,也是不行的。可以弄乙個u-a池,然後每次訪問時都從中隨機抽取乙個u-a。download_page(url):
headers=
data = requests.get(url,headers=headers)
return data
一般來說,真人瀏覽網頁的速度相對程式是很慢的,但是爬蟲不一樣。如果有人一秒鐘訪問了100次同乙個**,那幾乎毫無疑問,這就是爬蟲。一般來說,面對這種情況,我們有兩種辦法來解決。
第一種辦法很簡單。既然訪問太快會被禁,那我訪問慢點就好了啊。我們可以在每次訪問完**之後就設定乙個time.sleep,限制訪問速度。最好是用一台機器從慢到快訪問,找到被封的閾值,然後以稍微低一點的速度進行訪問。
第二種方法就是換ip。**一般是通過ip來識別訪問者的身份的,所以我們只要不停地更換ip,就可以偽裝成不同的人。同乙個ip一秒鐘訪問了100次很不正常,但是100個ip一秒鐘訪問100次就很正常了。那麼我們如何更換ip呢?其實也不用真正更換我們的ip,而是通過**ip**我們的請求。不少**提供了很多免費的**ip,我們只要把它們爬下來,以備不時之需。不過很多**ip壽命都不長,所以需要時常進行檢測。requests設定**ip也很簡單。
proxies =有些**,不管你做什麼,登入還是訪問頁面,都需要輸入驗證碼進行驗證。在這種情況下,我們必須識別出驗證碼,才能爬取**內容。有些簡單的字母加數字的驗證碼可以用ocr進行識別,其他一些滑動驗證之類的就需要其他的技巧來破解,這裡就不詳談了。requests.get(url, proxies=proxies)
登入很多時候是服務於**功能的,反爬蟲不過是順帶的目的。我們可以通過按f12檢查開發者工具來看**在登入時會傳送什麼資料,然後通過requests的相關函式模擬登陸。如果以後有時間會專門寫一篇文章來詳細說說。
爬蟲練習之了解反爬蟲機制
沒學習之前我理解字面意思就是你爬蟲 然後該 順著你的ip等會對你的網路電腦等造成損失 最簡單的是你爬 獲取不到正確的資訊 案例 爬取拉勾網python職位的薪資等 我們可以看到一般 並不能獲取到需要的資訊 瀏覽器訪問 的時候除了會傳送url,引數等內容外,還會給伺服器端傳遞一些額外的請求頭 requ...
python3爬蟲 反爬蟲應對機制
前言 訪問終端限制 這種可通過偽造動態的ua實現 訪問次數限制 一般通過cookie ip定位,可通過禁用cookie,或使用cookie池 ip池來反制 訪問時間限制 延遲請求應對 盜鏈問題 通俗講就是,某個網頁的請求是有跡可循的,比如知乎的問題回答詳情頁,正常使用者行為必然是先進入問題頁,在進入...
爬蟲 07 反爬蟲
回到頂部 爬蟲和反爬蟲基本概念 爬蟲 自動獲取 資料的程式,關鍵是批量的獲取。反爬蟲 使用技術手段防止爬蟲程式的方法。誤傷 反爬蟲技術將普通使用者識別為爬蟲,如果誤傷過高,效果再高也不能用。成本 反爬蟲需要的人力和機器成本。攔截 成功攔截爬蟲,一般攔截率越高,誤傷率越高。反爬蟲的目的 初級爬蟲 簡單...