#python #python-requests #user-agent
#python #python-запросы #user-agent
Вопрос:
Я пытаюсь загрузить файл с помощью модуля запросов python, мой код работает для некоторых URL-адресов / хостов, но я наткнулся на тот, который не работает.
Основываясь на других подобных вопросах, это может быть связано с заголовком запроса User-Agent, я попытался исправить, добавив chrome user-agent, но время ожидания соединения по-прежнему истекает для этого конкретного URL (это работает для других).
Я протестировал открытие URL в браузере chrome (который работает нормально) и проверку заголовков запросов, но я все еще не могу понять, почему мой код дает сбой:
import requests
url = 'http://publicdata.landregistry.gov.uk/market-trend-data/house-price-index-data/Indices-2020-03.csv'
headers = {'Upgrade-Insecure-Requests': '1', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36'}
session = requests.Session()
session.headers.update(headers)
response = session.get(url, stream=True)
# !!! code fails here for this particular url !!!
with open('test.csv', "wb") as fh:
for x in response.iter_content(chunk_size=1024):
if x: fh.write(x)
Обновление 2020-08-14
Я выяснил, что было не так; в тех случаях, когда код работал, URL-адреса использовали протокол https. Этот URL-адрес является протоколом http, и настройки моего прокси-сервера не были настроены для http, только https. После предоставления http-прокси для запросов мой код работал так, как написано.
Ответ №1:
Опубликованный вами код сработал для меня, он сохранил файл (129007 строк). Возможно, хост ограничивает скорость, повторите попытку позже, чтобы убедиться, что это работает.
# count lines
$ wc -l test.csv
129007 test.csv
# inspect headers
$ head -n 4 test.csv
Date,Region_Name,Area_Code,Index
1968-04-01,Wales,W92000004,2.11932727
1968-04-01,Scotland,S92000003,2.108087275
1968-04-01,Northern Ireland,N92000001,3.300419757
Комментарии:
1. Спасибо, что нашли время попробовать код. Я, наконец, выяснил, что было не так, и запустил код. Проблема была связана с настройками прокси-сервера https или http. Мой код ранее нормально выполнялся для URL-адресов https, но этот конкретный URL был http, и http-прокси не предоставлялся.
Ответ №2:
Вы можете отключить время ожидания запросов, передав timeout=None
. Вот официальная документация: https://requests.readthedocs.io/en/master/user/advanced/#timeouts
Комментарии:
1. Спасибо, я пробовал это, но получаю ту же ошибку. Скорее всего, хост не отвечает.
2. Интересно, вы пытаетесь запустить скрипт python с того же хоста, с которого вы запускаете тесты своего браузера? Я бы посоветовал также попробовать curl из командной строки и посмотреть, работает ли это.