Проверка того, загружается ли файл библиотекой запросов Python

StackOverflow https://stackoverflow.com//questions/21021120

  •  21-12-2019
  •  | 
  •  

Вопрос

У меня возникли проблемы со скриптом, который я разрабатываю, из-за чего я не получаю выходных данных, а использование памяти скриптом со временем становится все больше и больше.Я выяснил, что проблема связана с некоторыми URL-адресами, которые я проверяю с помощью библиотеки запросов.Я ожидаю загрузить веб-страницу, однако вместо этого загружаю большой файл.Все эти данные затем сохраняются в памяти, вызывая мои проблемы.

Что я хочу знать, так это;есть ли какой-нибудь способ с помощью библиотеки запросов проверить, что загружается?С помощью wget я могу видеть:Длина:710330974 (677M) [приложение/ почтовый индекс].

Доступна ли эта информация в заголовках запросов?Если да, то есть ли способ завершить загрузку, выяснив, что это не веб-страница в формате HTML?

Заранее благодарю.

Это было полезно?

Решение

Да, заголовки могут многое рассказать вам о странице, большинство страницы будут содержать заголовок размером с содержимое.

Однако по умолчанию запрос загружается полностью перед отправкой .get() или .post(), и т.д.вызов возвращается.Установите stream=True ключевое слово для отсрочки загрузки ответа:

response = requests.get(url, stream=True)

Теперь вы можете просмотреть заголовки и просто отклонить запрос, если вам не нравится то, что вы найдете:

length = int(response.headers.get('Content-Length', 0))
if length > 1048576:
    print 'Response larger than 1MB, discarding

Последующий доступ к .content или .text атрибуты, или .json() метод вызовет полную загрузку ответа.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top