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

时间:2015-08-20 10:30:27

标签: python request user-agent urllib

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

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

返回

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

通常,我会在请求中设置标头,例如:

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

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

是否有任何简单的解决方案(不包括导入请求等库)?我注意到urlretrieve是从Python 2发布的遗留接口的一部分,我应该使用什么呢?

我尝试创建一个自定义FancyURLopener类来处理检索文件,但这导致了比解决的问题更多的问题,例如为404链接创建空文件。

1 个答案:

答案 0 :(得分:0)

您可以继承URLopener并将version类变量设置为其他用户代理,然后继续使用urlretrieve。

或者您只需使用第二种方法,只有在检查code == 200后才能将响应保存到文件中。