18

次の Python コードを検討してください。

30 url = "http://www.google.com/search?hl=ja&safe=off&q=モンキー"
 31 url_object = urllib.request.urlopen(url);
 32 プリント (url_object.read());

これを実行すると、例外がスローされます。

File "/usr/local/lib/python3.0/urllib/request.py", line 485, in http_error_default
   raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
urllib.error.HTTPError: HTTP Error 403: Forbidden

ただし、これをブラウザーに入れると、期待どおりに検索が返されます。何が起きてる?プログラムでGoogleを検索できるようにするには、どうすればこれを克服できますか?

何かご意見は?

4

4 に答える 4

26

これでうまくいくはずです

user_agent = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.7) Gecko/2009021910 Firefox/3.0.7'

url = "http://www.google.com/search?hl=en&safe=off&q=Monkey"
headers={'User-Agent':user_agent,} 

request=urllib2.Request(url,None,headers) //The assembled request
response = urllib2.urlopen(request)
data = response.read() // The data u need
于 2009-05-12T20:46:05.080 に答える
25

プログラミング インターフェースを介して「適切に」Google 検索を行いたい場合は、Google APIをご覧ください。これらは Google 検索の公式な方法であるだけでなく、Google が結果ページのレイアウトを変更しても変更される可能性は低いです。

于 2009-03-01T21:22:09.043 に答える
2

lacquiが示唆したように、Google APIは、コードからリクエストを行う方法です。残念ながら、彼らのドキュメントは生の HTTP リクエストを作成するのではなく、AJAX Web ページを作成する人々を対象としていることがわかりました。LiveHTTP ヘッダーを使用して、サンプルが作成した HTTP 要求を追跡しました。ddipaolo のブログ投稿が役に立ちました。

私を台無しにしたもう1つのことは、クエリからの最初の64の結果に制限されていることです. 通常、Web ユーザーに検索ボックスを提供するだけであれば問題ありませんが、Google を使用してデータ マイニングを行おうとしている場合は役に立ちません。彼らは、API を使用してデータ マイニングを行うことを望んでいないと思います。この 64 という数字は時間の経過とともに変化し、検索サービスによって異なります。

更新:どうやら彼らは、あなたにデータマイニングをさせたくないようです。最終的に、このAPI アクセス通知へのリンクとともに 403 エラーが表示されます。

使用している API の利用規約 (右側のサイドバーにリンクされています) を確認し、遵守していることを確認してください。次の利用規約違反のいずれかにより、あなたをブロックした可能性があります: スクレイピングやプリフェッチなどの自動化されたリクエストを受け取りました。自動化されたリクエストは禁止されています。すべての要求は、エンド ユーザーのアクションの結果として行われる必要があります。

他の違反もリストされていますが、それが私のきっかけになったと思います。Yahoo の BOSS サービスを調査する必要があるかもしれません。制限はあまりないようです。

于 2010-11-04T06:22:55.503 に答える
0

あなたはそれをあまりにも頻繁にやっています。Google には、検索ボットに圧倒されるのを防ぐための制限があります。また、ユーザー エージェントを通常のブラウザーにより近いものに設定することもできます。

于 2009-03-01T21:20:45.893 に答える