如何用Python爬取Barchart网站的Gap Up和Gap Down表格
解决Barchart Gap Up页面表格数据爬取问题
问题原因
你找不到表格的class/ID,是因为这个页面的表格数据不是直接嵌入在初始HTML里的——页面采用动态渲染机制,表格内容是在页面加载完成后,通过AJAX请求从后端API获取并渲染出来的。所以你用requests获取的初始HTML里,根本没有表格元素的源码。
找到真实数据接口的方法
- 打开浏览器开发者工具(按F12),切换到「Network」标签页
- 刷新页面,在筛选栏选择「XHR/fetch」类型的请求
- 逐个查看请求的响应内容,找到返回表格结构化数据(JSON格式)的接口。在这个页面里,你会定位到类似
https://www.barchart.com/proxies/core-api/v1/quotes/get的请求,它的参数包含了「gapUp」筛选、排序规则等条件。
调整后的爬虫代码
直接请求这个API接口,就能拿到结构化的表格数据,不需要解析HTML:
import requests # 真实数据接口地址 api_url = "https://www.barchart.com/proxies/core-api/v1/quotes/get" # 对应页面筛选条件的请求参数 params = { "list": "stocks.us.gapUp", "orderBy": "gapUpPercent", "orderDir": "desc", "fields": "symbol,name,lastPrice,priceChange,percentChange,volume,volumeAvg,marketCap,tradeTime,gapUpPercent,gapDownPercent", "meta": "field.shortName,field.type,field.description", "page": 1, "limit": 100 } 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", "Referer": "https://www.barchart.com/stocks/performance/gap/gap-up?orderBy=gapUpPercent&orderDir=desc", "X-Requested-With": "XMLHttpRequest" } response = requests.get(api_url, headers=headers, params=params) if response.status_code == 200: data = response.json() # 遍历提取数据,示例只打印关键字段 for stock in data["data"]: print(f"代码: {stock['symbol']} | 名称: {stock['name']} | 跳空涨幅: {stock['gapUpPercent']}% | 当前价: {stock['lastPrice']}") else: print(f"请求失败,状态码: {response.status_code}")
注意事项
- 建议用当前浏览器的最新
User-Agent,避免被网站拦截 - 如果遇到403或验证问题,需要从浏览器的请求头里复制
Cookie字段添加到headers中 - API的参数(比如
fields、limit)可能会随网站更新变化,定期通过开发者工具检查确认
内容的提问来源于stack exchange,提问作者jimbus91
相关产品推荐
相关产品推荐

