Я очищу сайт, используя этот код (который работает), но я не уверен, как requests.get()
обрабатывает stream=True
, когда цикл прерывается с break
.
Это минимальный рабочий код:
import requests
# Not my real target
base_url='https://www.umu.se/?page='
# Real range will be range(1, 250000)
for url in [base_url + str(i) for i in range(1, 3)]:
chunks = []
with requests.get(url, stream=True) as r:
r.raise_for_status()
for chunk in r.iter_lines():
try:
if chunk.decode() == '</head>':
# Here I parse the data
# parse_my_data( ''.join(chunks) )
break
chunks.append(chunk.decode())
except:
# This should't happen
Причина всего этого зацикливания в том, что я хочу, чтобы он загружался с сервера только до конца <header>
, тем самым сохраняя на хост-сервере большой трафик.
Что еще более важно, я не хочу, чтобы цикл оставлял открытыми http-запросы. При использовании break
в цикле в состоянии with
этот скрипт зависает на удаленном сервере, заставляя сервер отключаться по сети при каждом моем запросе? Если так, то я в основном написал сценарий, похожий на медленную атаку лори, , которую я совершенно не хочу .
Сохраняет ли этот скрипт трафик, и можно ли его безопасно запустить?