web-dev-qa-db-ja.com

Python 3でurllib.request.urlopenのユーザーエージェントを変更する

urllib.request.urlopen('someurl')を使用してURLを開きたい:

with urllib.request.urlopen('someurl') as url:
b = url.read()

次のエラーが表示されます。

urllib.error.HTTPError: HTTP Error 403: Forbidden

このエラーは、サイトがpythonアクセスせず、ボットがネットワークリソースを浪費するのを防ぐためにアクセスできないことによるものであると理解しています。これは理解できます。しかし、ユーザーエージェントを変更する方法に関してこの問題について見つけたすべてのガイドとソリューションはurllib2であり、私はpython 3を使用しているため、すべてのソリューションは作業。

python 3でこの問題を修正するにはどうすればよいですか?

49
user3662991

Pythonドキュメント から:

import urllib.request
req = urllib.request.Request(
    url, 
    data=None, 
    headers={
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.47 Safari/537.36'
    }
)

f = urllib.request.urlopen(req)
print(f.read().decode('utf-8'))
64
Martin Konecny
from urllib.request import urlopen, Request

urlopen(Request(url, headers={'User-Agent': 'Mozilla'}))
20
Collin Anderson

私はちょうどここで同様の質問に答えました: https://stackoverflow.com/a/43501438/20682

URLを開くだけでなく、リソース(PDFファイル)など)もダウンロードする場合は、次のようにコードを使用できます。

    # proxy = ProxyHandler({'http': 'http://192.168.1.31:8888'})
    proxy = ProxyHandler({})
    opener = build_opener(proxy)
    opener.addheaders = [('User-Agent','Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.1 Safari/603.1.30')]
    install_opener(opener)

    result = urlretrieve(url=file_url, filename=file_name)

プロキシを追加した理由は、Charlesのトラフィックを監視するためです。ここに私が得たトラフィックを示します。

See the User-Agent

5
Tonny Xu