如何在 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
.
后才将响应保存到文件中
我正在尝试编写一段(简单的)代码来从 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
.