Загрузите файл, используя Python без селена, например, «Сохранить ссылку как» в Chrome. - PullRequest
0 голосов
/ 18 декабря 2018

Существует веб-страница , где я могу загружать zip-файлы, используя опцию «Сохранить ссылку как» в Chrome, но когда я копирую адрес ссылки и открываю ее в браузере, она возвращает 403/ запрещено.Я попытался сохранить файл, используя библиотеку запросов, но он также получил запрещенный ответ.

Я не знаю, как chrome может загрузить его, но я не могу загрузить, используя библиотеку запросов.

Как я могу загрузить файл без использования веб-драйвера selenium, поскольку это будет излишним для этогопростая задача?

Ответы [ 2 ]

0 голосов
/ 18 декабря 2018

Используйте 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

0 голосов
/ 18 декабря 2018

Я бы рекомендовал использовать запросы для этого.Простой пример ниже с первым заполненным файлом:

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)

Сайт проверяет наличие реферера в заголовке, если реферер не совпадает с самим сайтом, он отклоняет запрос.

...