запрашивает пост - и проблема механизма повтора - PullRequest
0 голосов
/ 10 ноября 2019

В моем веб-браузере есть следующий код:

postbody = {'Submit': {}, 'czas_kon2': '', 'czas_pocz2': '', 'num_pacz': '', 'typ': 'wsz'}
post = requests.post(spolka, data=postbody)
data = post.text

Я выполняю его более 400 веб-страниц в цикле, чтобы очистить данные с помощью многопроцессорной обработки (8 процессов). data должен содержать целую HTML-страницу для дальнейшей обработки XML. Но из 400 страниц я получаю 2, которые не возвращают значимое содержание. Я подозреваю, что это из-за большой нагрузки, которую я создаю. Я попытался time.sleep(1), time.sleep(10), но не повезло.

Как я могу гарантировать, что переменная data или post всегда будет содержать целую страницу, как для 398 рабочих?

Я пробовал просто, покацикл для повторения ... но он далек от совершенства (мне удалось получить 1 из оставшихся 2 страниц) после одной дополнительной попытки.

 while len(data) < 1024:
        postbody = {'Submit': {}, 'czas_kon2': '', 'czas_pocz2': '', 'num_pacz': '', 'typ': 'wsz'}
        post = requests.post(spolka, data=postbody)
        data = post.text

1 Ответ

0 голосов
/ 11 ноября 2019

Я думаю, вам следует добавить заголовки запроса.

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0'}
postbody = {'Submit': {}, 'czas_kon2': '', 'czas_pocz2': '', 'num_pacz': '', 'typ': 'wsz'}
post = requests.post(spolka, data=postbody, headers=headers)

и другие примеры заголовков:

headers = {
'Accept': 'text/javascript, application/javascript, application/ecmascript, application/x-ecmascript, */*; q=0.01',
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8',
'Host': 'www.google.com',
'Sec-Fetch-Mode': 'cors',
'Sec-Fetch-Site': 'same-origin',
'X-Requested-With': 'XMLHttpRequest',
'Cookies': '',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0'
}
...