2012-03-23 56 views
3

當我嘗試使用C#中的HttpWebRequest下載谷歌搜索結果頁面,一切都工作得非常好,如果我用簡單的搜索詞,像谷歌搜索將返回503錯誤複雜的搜索查詢

http://www.google.com/search?q=stackoverflow 

但是當我嘗試使其更復雜,例如

http://www.google.com/search?q=inurl%3A%22goethe%22%20filetype%3Apdf 

這意味着

inurl:"goethe" filetype:pdf 

,我將會收到503錯誤,因爲Google認爲我是機器人。有什麼解決方法嗎?

編輯:UserAgent設置爲「Mozilla/5.0」。

回答

3

以及..如果你的搜索程序完成,那麼谷歌恰好是正確的..你是:-)

歡呼殭屍!

+1

呃 - 真的。 :)我真的很想得到結果。 – 2012-03-23 15:04:45

1

我不認爲它與你的查詢發生的複雜程度有很大關係。唯一真正重要的是如果他們認爲你是一個機器人。如果您以極高的速度提交查詢,那麼Google會認爲您是機器人,因此有幾種可能的解決方案:

  1. 降低您發送查詢的速率。
  2. Use proxies to make multiple queries.

此外,需要注意的是,如果你做的web請求不保存Cookie,然後這可能是另一種「信號」谷歌認爲你是一個機器人是非常重要的。您還應該非常小心,不要讓代理被谷歌封鎖,因爲您正在刮大G。很難找到免費代理,如果您濫用它們,那麼它們會被關閉,因此成爲一個好公民!

祝你好運!

+2

有趣的是,我可以連續執行幾百次簡單的查詢,例如「stackoverflow」,但只要我使用「intitle」參數,Google就會向我發送一個503.「文件類型」工作雖然,我能夠在不到一分鐘的時間內收到900個PDF文件的結果頁面。 – 2012-03-23 17:24:26

+0

@dm Google在檢測到您是否使用「機器人」來查詢內容時看不到任何內容,他們會考慮多種因素,而且您可能會偶然發現他們認爲是明確的組合機器人活動。 *故意難以分辨可能觸發Google阻止機制的因素。 – Kiril 2012-03-23 18:02:44

1

嘗試Google Custom Search APIs and Tools.這將允許您檢索搜索結果,而不用擔心被拒絕訪問(達到限制)。

或者,模仿典型搜索查詢的所有細微差別。例如,在我的瀏覽器中,搜索inurl:"goethe" filetype:pdf導致this URL被請求。
然後有cookie和其他http頭。讓它看起來更像瀏覽器請求它。