Проверка того, загружается ли файл библиотекой запросов Python
-
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()
метод вызовет полную загрузку ответа.