繁体   English   中英

HTTPError:使用用户代理未找到

[英]HTTPError: Not Found using user-agent

我很想打开一个 url,如下所示:

import urllib.request

url = "https://www.chess.cornell.edu/index.php/users/calculato%20rs/calculator-absolute-flux-measurement-using-xpd100"
# I tried to access to this url.
req = urllib.request.Request(
    url, 
    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'
    }
)
# using the user agent like many answers suggested.
f = urllib.request.urlopen(req)

但是,我总是收到如下错误:

  File "C:\ProgramData\Anaconda3\lib\urllib\request.py", line 649, in http_error_default
    raise HTTPError(req.full_url, code, msg, hdrs, fp)

HTTPError: Not Found

非常感谢您的帮助!

我使用了请求库,它运行良好

import request
r = requests.get("https://www.chess.cornell.edu/index.php/users/calculato%20rs/calculator-absolute-flux-measurement-using-xpd100")

即使它返回一个,

<Response [404]>

你仍然可以使用r.text来获取站点的 html

这可能是因为站点返回状态404 (未找到),即使它实际上返回了有效页面。 虽然urllib出现恐慌并抛出错误,但您的浏览器和requests仍会继续执行并向我们显示页面。

很高兴这有帮助:)

如果即使是 404 错误也需要获取响应主体,这就是使用urllib完成的方式

try:
    f = urllib.request.urlopen(req)
except urllib.error.HTTPError as err:
    f = err

这是一个非常简单的片段,当然,假设你想稍后执行f.read()来处理内容。 在一个健壮的程序中,应该对 HTTP 响应代码、内容类型等进行各种检查。


当然,使用requests (正如@DeeraWijesundara 所建议的那样)并没有错。 事实上,在类似的情况下,我个人也会使用requests ,但为了完整起见,我决定添加一个仅限 stdlib 的答案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM