首页 > 解决方案 > 请求后重试机制问题

问题描述

我的网络爬虫中有以下代码:

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

我如何确保dataorpost变量始终包含整个页面,例如 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

标签: python-3.xweb-scrapingpython-requestsmultiprocessingpython-multiprocessing

解决方案


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

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

推荐阅读