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

如何抓取含隐藏表格数据的网站?Screener.in股票数据爬取求助

处理Screener.in季度业绩隐藏字段爬取方案
  • 问题本质:你用的静态爬取只能拿到页面首次加载的内容,那些点击「+」才显示的字段,要么是藏在页面源码里但被CSS隐藏,要么是点击后通过AJAX动态加载的。

两种解决思路

1. 若隐藏内容已在页面DOM中(只是被隐藏)

打开页面开发者工具(F12)检查元素,要是隐藏的行已经存在于表格里,只是带了hidden这类隐藏类,直接移除隐藏属性再解析即可:

import pandas as pd
from bs4 import BeautifulSoup
from urllib.request import Request, urlopen
from io import StringIO

url = 'https://www.screener.in/company/TATAPOWER/consolidated/'
req = Request(url, headers={'User-Agent': 'Mozilla/5.0'})
page = urlopen(req).read()
soup = BeautifulSoup(page, 'html.parser')

# 定位目标表格
table = soup.find("table", {"class": "data-table responsive-text-nowrap"})
# 移除所有隐藏行的class属性,让pandas能识别到这些行
for hidden_row in table.find_all("tr", class_="hidden"):
    hidden_row.attrs.pop('class', None)

# 解析完整表格
df = pd.read_html(StringIO(str(table)))[0]
print(df)

2. 若隐藏内容是AJAX动态加载的

点击「+」按钮时,打开开发者工具的Network标签,筛选XHR请求,找到加载隐藏数据的API接口,直接请求这个接口获取数据(比解析页面更高效):

import pandas as pd
import requests

headers = {
    'User-Agent': 'Mozilla/5.0',
    'X-Requested-With': 'XMLHttpRequest'
}
# 替换为你抓包得到的真实API地址,示例仅供参考
api_url = 'https://www.screener.in/api/company/TATAPOWER/consolidated/quarters/'
response = requests.get(api_url, headers=headers)
data = response.json()

# 根据API返回的JSON结构调整DataFrame生成逻辑
df = pd.DataFrame(data['quarters'])
print(df)

注意事项

  • 抓包时要完全复刻浏览器的请求头和参数,否则容易被网站拦截。
  • 控制请求频率,避免短时间内多次请求触发反爬机制。

内容的提问来源于stack exchange,提问作者Data-7scientist

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 09:56:14