對於 Python 抓取 Google 搜索結果的一些瞭解

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

相關文章
相關標籤/搜索