如何使用urlopen()在Python3中下载文件或将自定义标头添加到urlretrieve()?
问题描述:
tl; dr我想要从服务器上下载一个文件,只允许某些User-Agents
。我设法用下面的代码获取站点中的200 OK
:如何使用urlopen()在Python3中下载文件或将自定义标头添加到urlretrieve()?
opener = urllib.request.build_opener()
opener.addheaders = [('User-Agent', 'Interwebs Exploiter 4')]
opener.open(url)
由于文件可以是.pdf或.zip或其他格式,我想下载它,而不解析或读取它。 Urlretrieve()
似乎是一个好主意,但它使用默认标题,这使服务器返回403 Forbidden
。
如何通过使用该定制打开器来下载文件,或者只需将标题添加到urlretrieve()
?
和this example在Python Docs中对我来说是完全的废话。
答
我会用requests
为:
import requests
headers = {'User-Agent': 'Interwebs Exploiter 4'}
r = requests.get(url, allow_redirects=True, headers=headers)
with open(filename, 'wb') as f:
for chunk in r.iter_content(1024):
f.write(chunk)
除非它是绝对必要的因为某些原因使用urllib
做它无需安装额外的依赖的方法吗? – stendarr