Python分页网页爬取异常:带分页参数的URL无法获取目标记录
爬取分页页面无数据的问题解决方法
你的代码没获取到分页数据,核心原因是请求缺少必要的请求头,网站服务器识别出这是非浏览器发起的请求,返回了不含目标内容的页面。浏览器访问时会自动携带这些头信息,所以能正常显示结果。
具体修改方案:
- 添加请求头模拟浏览器,最关键的是
User-Agent字段,告诉服务器你是正常的浏览器访问 - 修正结果判断逻辑:
re.findall()返回的始终是列表,不会是None,应该用if not ampAccnPrec判断是否为空 - 可选:添加请求延迟,避免短时间内大量请求触发反爬机制
修改后的代码:
import requests import re import time lstCAMP_IDs = [] # 模拟Chrome浏览器的请求头 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36' } for i in range(1, 500): url = f'http://www.camp.bicnirrh.res.in/seqDb.php?page={i}' try: # 携带请求头发送请求 r = requests.get(url, headers=headers) r.raise_for_status() # 捕获HTTP请求错误 content = r.text # 直接用r.text更简便,requests会自动处理编码 ampAccnPrec = re.findall(r'(CAMPSQ[0-9]+)', content) if not ampAccnPrec: print(f"第{i}页未找到目标记录") continue lstCAMP_IDs.extend(ampAccnPrec) # 用extend避免嵌套列表,直接添加元素 print(f"已获取第{i}页的{len(ampAccnPrec)}条记录") time.sleep(1) # 每次请求后延迟1秒,降低被封风险 except Exception as e: print(f"第{i}页请求出错: {e}") # 可以打印总记录数验证 print(f"总共获取到{len(lstCAMP_IDs)}条记录")
关键改动说明:
- 添加headers:通过
User-Agent模拟浏览器,让服务器认为是正常访问 - 改用r.text:requests会自动识别页面编码,比手动decode更可靠
- 用extend替代append:避免lstCAMP_IDs变成嵌套列表,直接把每页的记录添加到总列表
- 添加异常处理和延迟:捕获请求错误,同时降低请求频率,减少被拦截的概率
内容的提问来源于stack exchange,提问作者Einav Laser
相关产品推荐
相关产品推荐

