使用不带硒的Python下载文件,例如Chrome的“另存为”

时间:2018-12-18 17:43:55

标签: python selenium google-chrome python-requests urllib2

有一个web page,可以在Chrome中使用“另存为”选项下载zip文件,但是当我复制link address并在浏览器中打开它时,它将返回403 / forbidden。我尝试使用请求库保存文件,但它也得到禁止的响应。

我不知道chrome如何下载它,但是我无法使用请求库下载。

如何在不使用Selenium Web驱动程序的情况下下载文件,因为这对于完成此简单任务是过大的?

2 个答案:

答案 0 :(得分:2)

我建议为此使用请求。下面是一个简单示例,其中第一个文件已填充:

url = 'https://www.nseindia.com/content/historical/EQUITIES/2003/DEC/cm01DEC2003bhav.csv.zip'
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.93 Safari/537.36', 'Referer': 'https://www.nseindia.com/'}
r = requests.get(url, allow_redirects=True, headers=headers)
open('cm01DEC2003bhav.csv.zip', 'wb').write(r.content)

网站在标头中检查引荐来源网址,如果引荐来源网址与网站本身不匹配,则会拒绝该请求。

答案 1 :(得分:2)

urllib.request.urlretrieve与自定义Referer标头一起使用,例如指定的@Douglas:

>>> import urllib.request
>>> opener = urllib.request.build_opener()
>>> opener.addheaders = [('Referer', 'https://www.nseindia.com/')]
>>> urllib.request.install_opener(opener)
>>> source = 'https://www.nseindia.com/content/historical/EQUITIES/2001/JAN/cm01JAN2001bhav.csv.zip'
>>> destination = 'destination.csv.zip'  # Path to destination.
>>> urllib.request.urlretrieve(source, destination)
('destination.csv.zip', <http.client.HTTPMessage object at 0x10ce20208>)

这会将您的文件下载到指定的文件路径。

File downloaded