Python爬虫:发送5-6次requests请求后页面无法加载如何解决
针对目标站点反爬限制的解决方案
这是典型的站点反爬策略触发了临时IP封禁,可通过以下方案优化:
- 新增随机请求延迟
无间隔连续请求非常容易被识别为爬虫,在两次请求之间添加3-10秒的随机延迟,模拟正常用户的浏览节奏:
import time import random # 每次发起请求前加延迟 time.sleep(random.randint(3, 10)) cz_link= requests.get(cz_page,timeout=10, verify=False,headers=headers)
- 轮换User-Agent
固定UA很容易被标记,你可以维护一个UA池,每次请求随机切换:
# UA池示例,可自行补充更多最新的浏览器UA ua_pool = [ 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 13_5) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Safari/605.1.15', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/119.0' ] headers['User-Agent'] = random.choice(ua_pool)
- 使用requests.Session保持会话
用会话对象自动管理Cookie,模拟正常用户的浏览上下文,特征更接近真实浏览器:
# 初始化会话,全局只用一个即可 session = requests.Session() session.headers.update(headers) # 发起请求时用session.get代替requests.get cz_link = session.get(cz_page, timeout=10, verify=False)
- 接入代理IP池
如果上述方案还是被封,可以使用短效代理IP,每发起几次请求就更换一次IP,避免本地IP被长期封禁,请求时添加proxies参数即可:
proxies = { 'http': 'http://你的代理IP:端口', 'https': 'http://你的代理IP:端口' } cz_link = session.get(cz_page, timeout=10, verify=False, proxies=proxies)
另外你当前使用verify=False会产生安全警告,可以在代码开头加一行requests.packages.urllib3.disable_warnings()关闭警告。如果已经触发了临时封禁,先停止请求15-30分钟,大部分站点的临时IP封禁会自动解除。
内容的提问来源于stack exchange,提问作者Király Csaba
相关产品推荐
相关产品推荐

