1

次のコードを使用して、コンテンツを解析するために URL を開こうとしています。しかし、Web ブラウザーで同じ URL を使用している場合ではなく、Python を使用すると 403 エラーが発生します。これを克服するための助けはありますか?

import urllib2
URL = 'http://www.google.com/search?q=something%20unusual'
response = urllib2.urlopen(URL)

Py インタープリターからの応答: HTTPError: HTTP エラー 403: Forbidden

4

2 に答える 2

3

Google はユーザー エージェント フィルタリングを使用して、ボットが検索サービスと対話するのを防ぎます。これらの結果を比較しcurl(1)、オプションで-Aフラグを使用して User-Agent 文字列を変更することで、これを確認できます。

$ curl -I 'http://www.google.com/search?q=something%20unusual'
HTTP/1.1 403 Forbidden
...

$ curl -I 'http://www.google.com/search?q=something%20unusual' -A 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:21.0) Gecko/20100101 Firefox/21.0'
HTTP/1.1 200 OK

代わりに、Google カスタム検索サービスを使用して Google 検索を自動化する必要があります。別の方法として、ライブラリを使用して独自の User-Agent ヘッダーを設定することもできますがurllib2(デフォルトの のようなものではなく"Python-urllib/2.6")、これは Google の利用規約に違反する可能性があります。

于 2013-06-17T17:57:27.307 に答える
3

User-Agentヘッダーはあなたに問題を与えているものです。Web ページは、User-Agentヘッダーをチェックすることによって、ブラウザ以外からのリクエストを禁止しているように思えます。User-Agent重要なのは、Python でブラウザーをシミュレートするa を設定することです。

これは私のために働いた:

In [1]: import urllib2

In [2]: URL = 'http://www.google.com/search?q=something%20unusual'

In [4]: opener = urllib2.build_opener()

In [5]: opener.addheaders = [('User-agent', 'Mozilla/5.0')]

In [6]: response = opener.open(URL)

In [7]: response
Out[7]: <addinfourl at 47799472 whose fp = <socket._fileobject object at 0x02D7F5B0>>

In [8]: response.read()

お役に立てれば!

于 2013-06-17T17:58:05.430 に答える