1.問題
php
目前主流的搜索引擎,非 google 莫屬,但其對於非法(流量異常、爬蟲)請求的封鎖也是異常嚴厲html
本人前段時間有個腳本用到了谷歌搜索,當時直接使用的是一個 python 開源項目python
但在使用過程當中,單 ip 的狀況下爬取速度可謂感人,稍不留神還會被封,因此對於獲取谷歌搜索結果的爬蟲有必要進行改進git
本人對於Python學習建立了一個小小的學習圈子,爲各位提供了一個平臺,你們一塊兒來討論學習Python。歡迎各位到來 Python學習羣:960410445一塊兒討論視頻分享學習。Python是將來的發展方向,正在挑戰咱們的分析能力及對世界的認知方式,所以,咱們與時俱進,迎接變化,並不斷的成長,掌握Python核心技術,纔是掌握真正的價值所在。
說一說爬取谷歌搜索結果的問題:github
1.正常打開谷歌搜索,而後審查元素想獲取目標內容的時候,會發現是一大串js。chrome
2.訪問過快就會出現流量異常dom
2.如何解決學習
對於第一個問題:測試
應該有看到審查元素出來的都是js,而後檢索的url是這樣的:搜索引擎
https://www.google.com.hk/search?q=hello&oq=hello&aqs=chrome..69i57j69i60l2j69i65j69i60j0.876j0j7&sourceid=chrome&ie=UTF-8&google_abuse=GOOGLE_ABUSE_EXEMPTION%3DID%3Daa946d8c657cf359:TM%3D1484917472:C%3Dr:IP%3D118.193.241.44-:S%3DAPGng0tGiKFaIr7YCaivUEmmEHOYJhG4jg%3B+path%3D/%3B+domain%3Dgoogle.com%3B+expires%3DFri,+20-Jan-2017+16:04:32+GMT
這裏解決辦法很粗暴,禁止掉js就好,讓咱們看看禁止js後是什麼樣的:
而後再看url: https://www.google.com.hk/search?q=hello&btnG=Search&safe=active&gbv=1
對於這個 url ,相信機智的你應該會明白些什麼
這裏能夠寫個簡單的腳本,好比說獲取,谷歌搜索第一頁全部結果的 html ,簡單寫下:
到了這裏,問題纔剛開始,你能夠作個實驗,我假設你是使用代理進行谷歌搜索,若是你接二連三無間隔使用谷歌搜索某一關鍵字二三十下,不出意外你會被要求進行這樣的驗證:
這個問題可真是讓人十分厭惡,我並無很好的解決辦法,能作的惟有儘可能避免:
1.ip輪詢 2.每次結果爬取增長休眠 3.隨機user_agent是必備
第一點和第三點沒必要多說,對於第二點增長休眠時間則須要咱們好好地進行檢測。 假設在單ip隨機ua狀況下:
1.這種狀況下不休眠的話請求個兩三次就會直接被封(次日會被解封)
2.我的以爲這不是個解決辦法,由於對休眠時間把控很差的話就會形成封ip,若是不想被封,我測試的話須要休眠60s浮動,這沒什麼意義
3.並且這種狀況下發現是直接封ip,對開發者太不友好
對於這種狀況,受同事神來一句,發現一個暫時的解決辦法,請看下圖:
單一ip不停地訪問統一谷歌域名天然很容易被察覺,谷歌全球190+的域名,難道都在實時的統計ip麼,可能有,但絕對不會像單域名那樣嚴格,來作個測試。
我將全球190+谷歌域名集中起來,像ua同樣隨機輪換,而後進行測試(單ip),結果還不錯:
1.首先沒有出現被封ip,只會提示流量異常
2.仍是須要休眠,本人休眠5~15s沒有被封過,可根據自身狀況來,若是想穩妥點就5~30s吧
我將這些寫成了一個項目,magic_google-python,若你是phper,能夠看看我寫的php版本php-google,具體代碼能夠看這裏,對應的功能很簡單:
3.總結
對google搜索結果的爬取,有如下建議:
1.ip輪詢
2.ua隨機
3.domain隨機
4.休眠
源碼已開源在GitHub,有興趣可查看源碼:https://github.com/howie6879/magic_google