如何評價可以自動更換 User-Agent 的爬蟲設計?

我寫了個爬蟲爬了一個網站一堆數據,自動換UA的,感覺很贊

不過很怕被目標網站給封了,
各位大神給些更好的策略吧~


爬蟲自動換User-Agent在代碼實現上只需要一句就夠了,並不是什麼高難度的技術活。爬蟲為什麼要換不同的User-Agent呢,無非就是為了模擬瀏覽器,讓伺服器不容易識別出自己是爬蟲。

對於爬蟲,其實上上策是爬網站之前先去讀一下網站的『robots.txt』文件,看看網站開發者(或網站主人)允許你爬什麼不允許你爬什麼,然後按照主人的意願,別做出格的事情。這著實是一種情懷。

當然,其實大部分情況下我們還是希望可以不論網站主人答不答應都爬下我們需要的內容,這就需要用到一些反反爬蟲的機制了。題主提到的換U-A其實就是一種方法,當然僅僅換U-A對於大部分有反爬蟲機制的網站是不夠的。

以下是幾種簡單常見的反爬蟲機制和解決辦法。

最簡單的自然就是什麼也不做,這樣的網站爬起來就非常簡單了,不贅述。

稍微攔一下的,可能就會校驗下User-Agent了,U-A的作用就是標識你是什麼瀏覽器/Client等等。一般編程語言內置的網路庫或者第三方網路庫,會將U-A設置成自己的標識,對於這樣的情況網站開發者就能夠很容易攔截了。於是就有了題主所說的換U-A,其實就是將庫默認的U-A替換為常用瀏覽器的U-A,以達到干擾伺服器識別的作用。

再複雜一點的,可能就不只是通過瀏覽器標識來識別了,訪問者的IP也是標識之一。這樣的反爬蟲機制有一個問題就是,如果從同一個IP出去的真實請求很多,比較容易誤判為爬蟲。一般伺服器會根據IP+Cookie來識別每個用戶。要爬取這樣的網站,一個比較簡單且有效的方案是換代理。很多網站提供免費代理,抓下它們,然後在發請求通過代理(最好是高匿代理),就可以搞定大部分網站了。值得注意的是代理的有效時間一般比較短,所以爬代理之後應該有一個有效的機制校驗已有代理的有效性。

更複雜的網站,就可能會通過賬號來限制了。這樣的網站一般在註冊賬號登錄之前並不能完整瀏覽需要的資訊,必須要註冊並登錄後才能看到。這樣的網站就需要註冊一批賬號了,在一個賬號不可用之後更換新的賬號。可以寫一個腳本來批量註冊賬號。當然註冊的時候一般會伴隨驗證碼,對於簡單的驗證碼可以Google以下OCR找找資料,複雜的驗證碼就手輸或者購買人肉打碼服務吧。

更加複雜的,就是一些社交網站了。社交網站大多非常封閉,拿新浪微博為例,微博在登錄時需要提交很多參數,登錄後請求的頁面也不是最終的源碼,還需要自己解析一遍。對於有大量js渲染的網頁,一般複雜但是容易(是的,這兩個詞不矛盾)的,可以自己解析,複雜但是不容易的就通過一些庫去做吧(比如Python的selenium等)。

........

中間還有很多就不總結了,最後講一種情況。大概這屬於爬蟲界的無解難題了,就是請求所有的資源都需要付費。是的,這類網站你需要在你的賬戶里充值,然後每次請求都是付費的,他們才不關心你是機器還是人,反正收費嘛。

大概就是這樣,時間比較緊,總結中很多漏洞,請見諒。


。。換了UA有啥用。。又不是識別不出你來。。就好像你在超市領贈品,每人只能領一次,你換個衣服再去。。。人家不但認得出來,還覺得你滑稽


至少換個 ip 吧。。。


感覺LZ這個防反爬策略太low...
這種防反爬的策略我還沒畢業就用了,對一些大的網站根本沒用,沒幾分鐘就被抓出來禁了。
頻繁換IP興許還有點用,畢竟一般的大站不會封一大段,排除一些瘋了的會封整個A段或者整個B段導致整個一片都沒有數據。
還有你拿下來的數據可能是XX寬頻緩存的,你看下以前有個提問,是調過最難調的BUG,裡面就是這樣的,XX寬頻會緩存目標網站URL的動態數據,蛋疼得不得了,所以你拿的數據有可能一點用處都沒有,早就過期了。
你最好再想想別的,從其他角度欺騙一下伺服器,沒事多看看別人的東西怎麼爬的。
你這樣隨便一個人都能寫的,github上很多的,自己去搜搜看。


換User Agent防封鎖基本上沒有效果,主流的UA就那麼幾個,隨便編一個反而會被禁止訪問。目前很多網站程序做的很複雜,識別UA的主要目的是為了自己的網站程序能很好的適配瀏覽器,如果你隨便編一個UA,很可能網站會錯誤對待你。

我編寫過瀏覽器程序,有自己的瀏覽器軟體,UA也是跟別人不一樣的,所以,一直擔心會有不兼容問題。

而解決反爬問題,這個是矛和盾的問題,也是大家比拼成本的問題。防的措施多,必然要投入資金,那麼也提高了爬的成本,看誰先服軟了。目前很多網站都需要部署分散式爬蟲才能爬,每個爬蟲爬的慢一點,大家協同在一起


之前工作的地方做爬蟲,爬[*智網](目前已改名*准網)是有個代理池的...至於你說的換UA我覺得真的在代碼實現上面沒什麼難度,而且意義在哪?
我感覺爬蟲的難度無非在於模擬登錄,模擬驗證碼,以及對待頁面各種異常情況的處理,這些也不過是臟活累活並不涉及到任何技巧.
所以爬蟲什麼真的沒難度的,還很累,也不知道意義在哪,所以我辭去了上家工作.


too young too naive


今天發現一個爬蟲不停變著 UA 在爬我們,然後我把它 IP 封了,感覺很贊


問題是我和我的朋友們反爬蟲的時候,從來沒考慮過根據UA特徵來封殺爬蟲,因為這是一個客戶端可以自行修改的HTTP Header,題主能想到給爬蟲換UA實在是別出心裁。
然而並沒有什麼卵用。


你還可以換IP,換請求頭,換cookie,換腎


多數情況下 使用UA是必要條件,沒必要更換,更換代理,多線程爬取,爬取非同步載入的數據才是才是重點。( ̄? ̄)


換ua太菜了,跑個js才真


題主,那些大網站,每天那麼大訪問量,難免有些主流軟體產生了一樣的UA吧,靠UA要怎麼分辨爬蟲和普通用戶啊?同種UA出現多就把人封掉?你這個設計到底有什麼意義啊……

起碼,換換IP吧……


用代理IP要比這個策略好


你可以寫一個瀏覽器引擎,換ua是沒用的。


目標網站是誰呀 具體網站具體分析


換ua就和換馬甲一樣,什麼時候寫個爬蟲跑個js就牛X了


推薦閱讀:

谷歌爬蟲主要是用C++開發嗎?
Linux下connect函數埠連到自己, 這種問題怎麼解決?
C++ 中的命名空間和類有什麼區別?
單元測試到底是什麼?應該怎麼做?
怎麼理解API和MFC的關係?

TAG:Python | Java | 爬蟲計算機網路 | C | C# |