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

嗨學程式設計發表於2019-01-02

1.問題

目前主流的搜尋引擎,非 google 莫屬,但其對於非法(流量異常、爬蟲)請求的封鎖也是異常嚴厲

本人前段時間有個指令碼用到了谷歌搜尋,當時直接使用的是一個 python 開源專案

但在使用過程中,單 ip 的情況下爬取速度可謂感人,稍不留神還會被封,所以對於獲取谷歌搜尋結果的爬蟲有必要進行改進

本人對於Python學習建立了一個小小的學習圈子,為各位提供了一個平臺,大家一起來討論學習Python。歡迎各位到來Python學習群:960410445一起討論視訊分享學習。Python是未來的發展方向,正在挑戰我們的分析能力及對世界的認知方式,因此,我們與時俱進,迎接變化,並不斷的成長,掌握Python核心技術,才是掌握真正的價值所在。 

說一說爬取谷歌搜尋結果的問題:

1.正常開啟谷歌搜尋,然後審查元素想獲取目標內容的時候,會發現是一大串js。

2.訪問過快就會出現流量異常

2.如何解決

對於第一個問題:

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

應該有看到審查元素出來的都是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後是什麼樣的:

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

然後再看url: https://www.google.com.hk/search?q=hello&btnG=Search&safe=active&gbv=1

對於這個 url ,相信機智的你應該會明白些什麼

這裡可以寫個簡單的指令碼,比如說獲取,谷歌搜尋第一頁所有結果的 html ,簡單寫下:

到了這裡,問題才剛開始,你可以做個實驗,我假設你是使用代理進行谷歌搜尋,如果你連續不斷無間隔使用谷歌搜尋某一關鍵字二三十下,不出意外你會被要求進行這樣的驗證:

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

這個問題可真是讓人十分厭惡,我並沒有很好的解決辦法,能做的唯有儘量避免:

1.ip輪詢 2.每次結果爬取增加休眠 3.隨機user_agent是必備

第一點和第三點不必多說,對於第二點增加休眠時間則需要我們好好地進行檢測。 假設在單ip隨機ua情況下:

1.這種情況下不休眠的話請求個兩三次就會直接被封(第二天會被解封)

2.個人覺得這不是個解決辦法,因為對休眠時間把控不好的話就會造成封ip,如果不想被封,我測試的話需要休眠60s浮動,這沒什麼意義

3.而且這種情況下發現是直接封ip,對開發者太不友好

對於這種情況,受同事神來一句,發現一個暫時的解決辦法,請看下圖:

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

單一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


相關文章