Python爬虫自学之第(①)篇——爬虫伪装和反“反爬”
有些網站是防爬蟲的。其實事實是,凡是有一定規模的網站,大公司的網站,或是盈利性質比較強的網站,都是有高級的防爬措施的。總的來說有兩種反爬策略,要么驗證身份,把蟲子踩死在門口;要么在網站植入各種反爬機制,讓爬蟲知難而退。
本節內容就著這兩種反爬策略提出一些對策。
身份偽裝
??就算是一些不知名的小網站,多多少少還會檢查一下headers驗證一下訪者的身份,大網站就更不用說了(我一次爬網易云的時候,忘記加headers,直接被紅掉)
??所以,為了讓蟲寶們帶著信息凱旋歸來,我們要教會爬蟲們如何偽裝;有時光偽裝也不行,我們還要教爬蟲具體"如何做人",讓自己的舉止更像普通人而不是比單身漢手速還快的未知生物。
自定制 Requests Headers
- “吾是人!”——修改user-agent:里面儲存的是系統和瀏覽器的型號版本,通過修改它來假裝自己是人。
- “我從河北省來”——修改referer:告訴服務器你是通過哪個網址點進來的而不是憑空出現的,有些網站會檢查。
- “餅干!”:——帶上cookie,有時帶不帶餅干得到的結果是不同的,試著帶餅干去“賄賂”服務器讓她給你完整的信息。
- 詳細數據可以F12捉個包來查看其Requests Headers
身份偽裝
??就算是一些不知名的小網站,多多少少還會檢查一下headers驗證一下訪者的身份,大網站就更不用說了(我一次爬網易云的時候,忘記加headers,直接被紅掉)
??所以,為了讓蟲寶們帶著信息凱旋歸來,我們要教會爬蟲們如何偽裝;有時光偽裝也不行,我們還要教爬蟲具體"如何做人",讓自己的舉止更像普通人而不是比單身漢手速還快的未知生物。
自定制 Requests Headers
- “吾是人!”——修改user-agent:里面儲存的是系統和瀏覽器的型號版本,通過修改它來假裝自己是人。
- “我從河北省來”——修改referer:告訴服務器你是通過哪個網址點進來的而不是憑空出現的,有些網站會檢查。
- “餅干!”:——帶上cookie,有時帶不帶餅干得到的結果是不同的,試著帶餅干去“賄賂”服務器讓她給你完整的信息。
- 詳細數據可以F12捉個包來查看其Requests Headers
headers數據通常用這兩個即可,而且筆者強烈推薦在爬蟲中為每個request都配個user-agent,總比什么都沒有好,加了也不會報錯。
降低主IP訪問頻率
注意:這是針對長期的,大范圍的爬蟲的
有些網站會監視某個ip的訪問頻率和次數,一但超過某個閾值,就把你當作爬蟲嫌犯趕出去了,這時就要想辦法降低自己的存在感了。
- Zzzzz——休眠:爬一段時間后休息一會,不僅是為了自己的成功,也是為服務器著想。
- 我不去,我派別人去——ip代理:通過proxies參數來使用,前提是你要有ip,好的ip代理是要花錢的。
反 反爬(簡析)
在系列第零篇中我提到獲取網頁源碼是有坑的,沒錯,有些時候headers偽裝什么的都做足了,可你還是不能如愿以償的獲得正確的網頁源碼,要么缺,要么給你一堆毫不相關的東西,要么干脆讓你紅掉。
這說明要點不是偽不偽裝的問題了,而是如何去解讀網頁的防爬機制從而推出解決方法,這就要求比較高的觀察和分析能力了。
就我目前遇到的主要有:
- 隨機校驗碼:網頁生成隨機碼,并要求你將其提交才接受你的請求(多用在登錄驗證中)。——這種校驗碼通常藏在網頁源碼中,先取再交是策略。
- 無序網址:網址后跟著一大串看不出規律的東西。——跟這種東西是沒話說的,直接上selenium。
- 加密/雜亂的源碼:你知道你要的東西就在那里,但是不知道怎樣提取出來。——推理解謎,看腦子好不好使了。
- 動態加載:需要和頁面交互才能獲取更多信息,但是爬蟲沒法和它交互啊。——直接上selenium/手動捉包分析出目標鏈接
- ajax技術:異步加載,網頁內容分次加載,用爬蟲只能得到第一次發出的html,導致信息不全。——上selenium/手動捉包分析出目標連接
補充:
selenium模塊,模擬瀏覽器,強是強但是缺點是慢。
其實動態加載是為了方便用戶點哪看哪的,但這也加大了爬蟲的難度,因為很多信息因此被隱藏了起來。
最后
偽裝有套路,代碼直接套,多加headers總沒錯。
內嵌反爬很靈活,沒有什么固定的代碼格式,要花時間去分析出來。
本文新出現的方法/模塊,后面會有實例,不要方。
下一篇正式進入網頁解析主題,之后就可以開始寫小爬蟲了?(^?^●)ノ。
headers = {'Referer':'https://accounts.pixiv.net/loginlang=zh&source=pc&view_type=page&ref=wwwtop_accounts_index',#如某些網站(如p站)要檢查referer,就給他加上'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.146 Safari/537.36'#每個爬蟲必備的偽裝} r = requests.get("https://segmentfault.com/a/1190000014383966",headers=headers)headers數據通常用這兩個即可,而且筆者強烈推薦在爬蟲中為每個request都配個user-agent,總比什么都沒有好,加了也不會報錯。
降低主IP訪問頻率
注意:這是針對長期的,大范圍的爬蟲的
有些網站會監視某個ip的訪問頻率和次數,一但超過某個閾值,就把你當作爬蟲嫌犯趕出去了,這時就要想辦法降低自己的存在感了。
- Zzzzz——休眠:爬一段時間后休息一會,不僅是為了自己的成功,也是為服務器著想。
- 我不去,我派別人去——ip代理:通過proxies參數來使用,前提是你要有ip,好的ip代理是要花錢的。
反 反爬(簡析)
在系列第零篇中我提到獲取網頁源碼是有坑的,沒錯,有些時候headers偽裝什么的都做足了,可你還是不能如愿以償的獲得正確的網頁源碼,要么缺,要么給你一堆毫不相關的東西,要么干脆讓你紅掉。
這說明要點不是偽不偽裝的問題了,而是如何去解讀網頁的防爬機制從而推出解決方法,這就要求比較高的觀察和分析能力了。
就我目前遇到的主要有:
- 隨機校驗碼:網頁生成隨機碼,并要求你將其提交才接受你的請求(多用在登錄驗證中)。——這種校驗碼通常藏在網頁源碼中,先取再交是策略。
- 無序網址:網址后跟著一大串看不出規律的東西。——跟這種東西是沒話說的,直接上selenium。
- 加密/雜亂的源碼:你知道你要的東西就在那里,但是不知道怎樣提取出來。——推理解謎,看腦子好不好使了。
- 動態加載:需要和頁面交互才能獲取更多信息,但是爬蟲沒法和它交互啊。——直接上selenium/手動捉包分析出目標鏈接
- ajax技術:異步加載,網頁內容分次加載,用爬蟲只能得到第一次發出的html,導致信息不全。——上selenium/手動捉包分析出目標連接
補充:
selenium模塊,模擬瀏覽器,強是強但是缺點是慢。
其實動態加載是為了方便用戶點哪看哪的,但這也加大了爬蟲的難度,因為很多信息因此被隱藏了起來。
最后
偽裝有套路,代碼直接套,多加headers總沒錯。
內嵌反爬很靈活,沒有什么固定的代碼格式,要花時間去分析出來。
本文新出現的方法/模塊,后面會有實例,不要方。
下一篇正式進入網頁解析主題,之后就可以開始寫小爬蟲了?(^?^●)ノ。
總結
以上是生活随笔為你收集整理的Python爬虫自学之第(①)篇——爬虫伪装和反“反爬”的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 苹果手机长截屏_iPhone终于自带长截
- 下一篇: Thinkphp编辑器扩展类kinded