我正在尝试编写一段(简单的)代码来从互联网上下载文件。问题是,其中一些文件位于阻止默认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链接创建空文件。
答案 0 :(得分:0)
您可以继承URLopener
并将version
类变量设置为其他用户代理,然后继续使用urlretrieve。
或者您只需使用第二种方法,只有在检查code == 200
后才能将响应保存到文件中。