Почему urllib.request.urlopen дает мне 404 на сайте Wall Street Journal? - PullRequest
0 голосов
/ 16 апреля 2020

Проблема

Я использую urllib.request.urlopen в Wall Street Journal, и это дает мне 404.

Подробности

Другие сайты работают нормально. Та же ошибка, если я использую https://. Я сделал этот пример в REPL, но такая же ошибка происходит в моих звонках с моего Django сервера:

>>> from urllib.request import urlopen
>>> urlopen('http://www.wsj.com')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/urllib/request.py", line 222, in urlopen
    return opener.open(url, data, timeout)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/urllib/request.py", line 531, in open
    response = meth(req, response)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/urllib/request.py", line 641, in http_response
    'http', request, response, code, msg, hdrs)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/urllib/request.py", line 569, in error
    return self._call_chain(*args)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/urllib/request.py", line 503, in _call_chain
    result = func(*args)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/urllib/request.py", line 649, in http_error_default
    raise HTTPError(req.full_url, code, msg, hdrs, fp)
urllib.error.HTTPError: HTTP Error 404: Not Found

Вот как это должно работать:

>>> urlopen('http://www.cbc.ca')
<http.client.HTTPResponse object at 0x10b0f8c88>

Я не уверен, как отладить это. Кто-нибудь знает, что происходит, и как я могу это исправить?

1 Ответ

0 голосов
/ 16 апреля 2020

Сначала запрос на импорт, подобный этому:

from urllib.request import **Request**, urlopen

, а затем передайте свой URL и заголовок на запрос, как показано ниже:

url = 'https://www.wsj.com/'
response_obj = urlopen(Request(url, headers={'User-Agent': 'Mozilla/5.0'}))
print(response_obj)

Я проверил его сейчас, работает

...