如何在 Python 3 中使用 User-Agent headers 检索文件?

How can I retrieve files with User-Agent headers in Python 3?

我正在尝试编写一段(简单的)代码来从 Internet 下载文件。问题是,其中一些文件位于阻止默认 python User-Agent headers 的网站上。例如:

import urllib.request as html
html.urlretrieve('http://whosebug.com', 'index.html')

returns

urllib.error.HTTPError: HTTP Error 403: Forbidden`

一般情况下,我会在请求中设置headers,比如:

import urllib.request as html
request = html.Request('http://whosebug.com', headers={"User-Agent":"Firefox"})
response = html.urlopen(request)

但是,由于 urlretrieve 出于某种原因无法处理请求,因此这不是一个选项。

对此是否有任何 simple-ish 解决方案(不包括导入诸如请求之类的库)?我注意到 urlretrieve 是从 Python 2 发布的旧版界面的一部分,有什么我应该改用的吗?

我尝试创建一个自定义的 FancyURLopener class 来处理检索文件,但这导致的问题多于解决的问题,例如为 404.

的链接创建空文件

您可以子class URLopener 并将 version class 变量设置为不同的用户代理,然后继续使用 urlretrieve。

或者您可以简单地使用第二种方法,仅在检查 code == 200.

后才将响应保存到文件中