Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python3中检索带有用户代理头的文件?_Python_Request_User Agent_Urllib - Fatal编程技术网

如何在Python3中检索带有用户代理头的文件?

如何在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

我正试图写一段(简单的)代码从互联网上下载文件。问题是,其中一些文件位于阻止默认python用户代理头的网站上。例如:

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
后将响应保存到文件