0

ウィキペディアからページを取得しようとしています。リクエストに「User-Agent」ヘッダーを追加しました。ただし、urllib2.urlopen を使用してページを開くと、結果として次のページが表示されます: エラー: 要求された URL を取得できませんでした

エラー

要求されたURLを取得できませんでした

URL を取得しようとしたときに、次のエラーが発生しました:

  • アクセスが拒否されました。

    アクセス制御の設定により、現時点ではリクエストが許可されません。これが正しくないと思われる場合は、サービス プロバイダーにお問い合わせください。

ページを開くために使用するコードは次のとおりです。

def get_site(request_user_link,request):                                                    # request_user_link is request for url entered by user
                                                                                            # request is request generated by current page - used to get HTTP_USER_AGENT
                                                                                            # tag for WIKIPEDIA and other sites
    request_user_link.add_header('User-Agent',str(request.META['HTTP_USER_AGENT']))
    try:
        response = urllib2.urlopen(request_user_link)
    except urllib2.HTTPError, err:
        logger.error('HTTPError = ' +str(err.code))
        response=None
    except urllib2.URLError, err:
        logger.error('HTTPError = ' +str(err.reason))
        response=None
    except httplib.HTTPException, err:
        logger.error('HTTPException')
        response=None
    except Exception:
        import traceback
        logger.error('generic exception' + traceback.format_exec())
        response=None
    return response

現在のユーザー オブジェクトの HTTP_USER_AGENT の値を、ウィキペディアに送信する要求の "User-Agent" ヘッダーとして渡します。このリクエストに追加する必要があるヘッダーが他にある場合は、お知らせください。それ以外の場合は、別の解決策をアドバイスしてください。

編集:「User-Agent」ヘッダーを追加した後、昨日ページを正常に取得できたことに注意してください。今日、このエラーページが表示されるようです。

4

2 に答える 2

1

私はウィキペディアから読み取るスクリプトを書きました。これは簡略化されたバージョンです。

import urllib2
opener = urllib2.build_opener()
opener.addheaders = [('User-agent', 'Mozilla/5.0')] #wikipedia needs this    
resource = opener.open(URL)
data = resource.read()
resource.close()
#data is your website.
于 2012-09-20T07:01:13.093 に答える
1

ウィキペディアは、クローリング ルールに違反した場合、あまり寛大ではありません。標準の urllib2 ユーザー エージェントを使用して最初に IP を公開したとき、ログでブランド化されました。ログが「処理」されたとき、あなたの IP は禁止されました。これは、別の IP に対してスクリプトを実行することで簡単にテストできます。ウィキペディアは IP 範囲をブロックすることでも知られているため、注意してください。

通常、IP 禁止は一時的なものですが、複数の違反がある場合は恒久的になる可能性があります。

ウィキペディアには、既知のプロキシ サーバーの自動禁止もあります。proxy-list.org のような匿名プロキシ サイトや、hidemyass.comような商用プロキシ サイトをIP 用に解析しているのは、彼ら自身ではないかと思います。

ウィキペディアはもちろん、荒らしやスパムからコンテンツを保護するためにこれを行っています。ルールを守ってください。

可能であれば、自分のサーバーでウィキペディアのローカル コピーを使用することをお勧めします。このコピーは、ハートのコンテンツに違反する可能性があります。

于 2012-09-20T22:11:32.710 に答える