Как ограничить размер загружаемого requests.get в скрипте python?
В скрипте на python я получаю код страницы:
response = requests.get(url, timeout=10)
Как я могу ограничить размер получаемых страниц? И как проще проверять размер?
Ответы (1 шт):
Автор решения: quswadress
→ Ссылка
Вы можете использовать параметр stream и непрерывно читать поток байтов, а затем прерывать запрос когда размер получаемой страницы превышает лимит.
import requests
def get_with_limit_size(url, **kwargs):
"""
request.get с ограничением по размеру данных
:keyword max_size: Максимальный размер
:keyword decode_unicode: Декодировать байты в строку если можно
:return: None, если размер превышает max_size, иначе строку или байты.
:rtype: Optional[Union[str, bytes]]
"""
max_size = kwargs.pop("max_size")
decode_unicode_if_can = kwargs.pop("decode_unicode")
request = requests.get(url, stream=True, **kwargs)
request.raise_for_status()
if int(request.headers.get("Content-Length", -1)) > max_size:
return None
size = 0
result = None
for chunk in request.iter_content(4096, decode_unicode_if_can):
size += len(chunk)
if size > max_size:
return None
if result is None:
result = "" if type(chunk) is str else b""
result += chunk
return result
test_url = "https://ya.ru/"
assert get_with_limit_size(
test_url, decode_unicode=False, max_size=0) is None
assert get_with_limit_size(
test_url, decode_unicode=False, max_size=1024 * 1024) is not None
assert type(
get_with_limit_size(
test_url, decode_unicode=False, max_size=1024 * 1024)) is bytes
assert type(
get_with_limit_size(
test_url, decode_unicode=True, max_size=1024 * 1024)) is str
Часть кода была взята с SO EN.