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

如何调试BSEIndia API变更并传递正确参数恢复Python数据抓取

调试BSEIndia API数据抓取方案

问题分析

原代码失效大概率是因为API的验证机制或参数要求更新,比如旧的User-Agent被拦截、参数名/取值调整,或者请求格式变更。

关键修改点

  • 更新User-Agent:使用更现代的浏览器标识,避免被反爬拦截
  • 补充请求头:添加来源页标识,模拟正常网页访问行为
  • 增加异常捕获:避免因API返回非JSON格式或HTTP错误导致程序崩溃
  • 校验响应字段:兼容可能的响应结构变更

修改后的代码

import requests
import pandas as pd
import numpy as np

pdate = "20230721"               # 起始日期
date = "20230724"                # 结束日期
url = 'https://api.bseindia.com/BseIndiaAPI/api/AnnGetData/w'

# 更新为现代浏览器请求头,模拟正常访问
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36',
    'Accept': 'application/json, text/plain, */*',
    'Referer': 'https://www.bseindia.com/corporates/ann.html'
}

payload = {
    'Pageno': 1,
    'strCat': '-1',
    'strPrevDate': pdate,
    'strScrip': '',
    'strSearch': 'P',
    'strToDate': date,
    'strType': 'C'
}

data = []
should_fetch_next_page = True

while should_fetch_next_page:
    print(f"Fetching page {payload['Pageno']} ...")
    try:
        response = requests.get(url, headers=headers, params=payload, timeout=10)
        response.raise_for_status()  # 捕获4xx/5xx HTTP错误
        jsonData = response.json()
        
        # 校验响应中是否存在有效数据字段
        if "Table" in jsonData and jsonData["Table"]:
            data.extend(jsonData["Table"])
            payload['Pageno'] += 1
        else:
            should_fetch_next_page = False
    except requests.exceptions.RequestException as e:
        print(f"请求错误: {e}")
        should_fetch_next_page = False
    except ValueError:
        print("API返回非JSON格式数据,可能被反爬拦截")
        should_fetch_next_page = False

df = pd.DataFrame(data)
print(df)

额外调试建议

  • 对比浏览器请求:打开BSEIndia官方公告页,用F12开发者工具查看实际网络请求,核对参数、请求头与代码的差异
  • 验证参数取值:检查strType、strSearch等参数的可选值是否有变更,可通过页面表单的选项确认
  • 调整分页逻辑:若API返回总页数字段,可直接根据总页数控制抓取次数,替代空数据判断逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 05:09:57