如何在Python3中检索带有用户代理头的文件?
我正试图写一段(简单的)代码从互联网上下载文件。问题是,其中一些文件位于阻止默认python用户代理头的网站上。例如:如何在Python3中检索带有用户代理头的文件?,python,request,user-agent,urllib,Python,Request,User Agent,Urllib,我正试图写一段(简单的)代码从互联网上下载文件。问题是,其中一些文件位于阻止默认python用户代理头的网站上。例如: import urllib.request as html html.urlretrieve('http://stackoverflow.com', 'index.html') 返回 urllib.error.HTTPError: HTTP Error 403: Forbidden` 通常,我会在请求中设置头,例如: import urllib.request as htm
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
无法处理请求,因此这不是一个选项
有没有简单的ish解决方案(不包括导入库,如请求)?我注意到urlretrieve是从Python2发布的遗留接口的一部分,有什么我应该使用的吗
我尝试创建一个自定义的FancyURLopener类来处理检索文件,但这导致了比它解决的问题更多的问题,例如为404链接创建空文件。您可以将
URLopener
子类化,并将version
类变量设置为不同的用户代理,然后继续使用urlretrieve
或者,您可以简单地使用第二种方法,仅在检查
code==200
后将响应保存到文件。您可以将URLopener
子类化,并将version
类变量设置为不同的用户代理,然后继续使用urlretrieve
或者,只需使用第二种方法,并在检查code==200
后将响应保存到文件