You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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)}条记录")

关键改动说明:

  1. 添加headers:通过User-Agent模拟浏览器,让服务器认为是正常访问
  2. 改用r.text:requests会自动识别页面编码,比手动decode更可靠
  3. 用extend替代append:避免lstCAMP_IDs变成嵌套列表,直接把每页的记录添加到总列表
  4. 添加异常处理和延迟:捕获请求错误,同时降低请求频率,减少被拦截的概率

内容的提问来源于stack exchange,提问作者Einav Laser

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 22:53:06