1

BeautifulSoup を使用して、Google 画像からランダムな画像を見つけようとしています。私のコードは次のようになります。

import urllib, bs4, random
from urllib import request
urlname = "https://www.google.com/search?hl=en&q=" + str(random.        randrange(999999))  + "&ion=1&bav=on.2,or.r_gc.r_pw.r_cp.r_qf.&bvm=bv.  42553238,d.dmg&biw=1354&bih=622&um=1&ie=UTF-                            8&tbm=isch&source=og&sa=N&tab=wi&ei=sNEfUf-fHvLx0wG7uoG4DQ"

page = bs4.BeautifulSoup(urllib.request.urlopen(urlname)

しかし、ページ オブジェクトから HTML を取得しようとすると、次のようになります。

urllib.error.HTTPError: HTTP Error 403: Forbidden

生成された URL を Web ブラウザーに貼り付けてテストしましたが、ブラウザーはこのエラーを返しません。どうしたの?

4

2 に答える 2

1

グーグルがあなたに言っていると確信しています:「これをしないでください」。http 403 エラーのこの説明を参照してください。

何が起こっているのかというと、あなたの python スクリプト、より具体的には urllib がヘッダーを送信していて、これがブラウザからではなく、ある種の単純なリクエストであることを Google に伝えているということです。

そうしないと、多くの人が単純に自分の Web サイトをスクレイピングして、Google の結果を自分の結果として表示してしまうからです。

これまでのところ、私が見ることができる2つの解決策があります。

1) Googleカスタム検索 APIを使用します。画像検索をサポートし、1 日あたり 100 クエリの無料割り当てがあります。それ以上のクエリについては料金を支払う必要があります。

2) mechanize のようなツール、Web サイトにブラウザであると言って誤解を招くものであり、実際には改ざんされたヘッダーを送信するなどしてボットをスクレイピングするものではありません。ここでの一般的な問題は、スクレーパーが貪欲すぎる (短い間隔で要求が多すぎる) 場合、Google があなたの IP アドレスを永久にブロックすることです...

于 2013-04-16T05:21:01.643 に答える