请求发布和重试机制问题

时间:2019-11-09 21:19:13

标签: python-3.x web-scraping python-requests multiprocessing python-multiprocessing

我的网络抓取程序中包含以下代码:

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),但这里没有运气。

如何确保datapost变量始终包含整个页面,例如398个工作页面?

我尝试了一个简单的while循环重试...但是在一次额外的尝试之后,它还远非完美(我能够从剩余的2页中获得1个)。

 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 :(得分:0)

我认为您应该添加一个请求标头。

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'
}