如何从指定网页抓取历史数据图表?请求技术实现指导
抓取历史数据图表的操作流程与数据定位方案
一、网页(Quantalys基金历史页)数据抓取
1. 先定位数据来源
打开浏览器F12开发者工具,切到Network标签页刷新页面:
- 优先找XHR/fetch类型的请求,这类金融网站大概率会用API返回JSON格式的历史数据,直接抓接口比爬HTML省心多了。
- 如果数据是硬嵌在HTML里的,切到Elements标签页,用Ctrl+F搜图表里的数值,找到对应的DOM节点(比如带特定class的表格、带data属性的div)。
2. 具体抓取方法
非技术用户:用浏览器插件快速导出
装个TableCapture之类的插件,直接识别页面里的表格,一键导出成CSV/Excel——如果图表是基于表格生成的,这方法最快。
技术用户:写脚本抓取
- 抓API接口:用Python的
requests库调用找到的API,记得带上请求头(User-Agent和Cookie,网站可能要验证登录状态,Cookie从浏览器开发者工具里复制)。示例代码:
import requests import json 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', 'Cookie': '替换成你浏览器里的网站Cookie' } api_url = '替换成找到的历史数据API地址' resp = requests.get(api_url, headers=headers) data = resp.json() # 保存数据 with open('fund_history.json', 'w', encoding='utf-8') as f: json.dump(data, f, indent=2)
- 解析HTML:如果没找到API,用
BeautifulSoup扒页面里的表格数据:
from bs4 import BeautifulSoup import requests url = 'https://www.quantalys.com/Fonds/Historique/19801' headers = {'User-Agent': '你的浏览器UA字符串'} resp = requests.get(url, headers=headers) soup = BeautifulSoup(resp.text, 'html.parser') # 定位表格,比如找class包含historical的表格 table = soup.find('table', class_=lambda c: c and 'historical' in c) if table: rows = table.find_all('tr') for row in rows: cols = [col.text.strip() for col in row.find_all('td')] print(cols)
3. 注意点
- 网站可能需要登录才能看全数据,先手动登一遍,把Cookie复制到请求头里。
- 别薅太狠,控制请求频率,不然IP会被封。
二、图片中图表的数据提取
1. 工具选择
- 纯文本类图表:用OCR工具,比如Windows截图后右键“提取文本”,或者Tesseract本地OCR。
- 折线/柱状图:用WebPlotDigitizer,专门提取图表数据的工具,精度比OCR高。
2. WebPlotDigitizer操作步骤
- 打开工具,上传目标图片。
- 选择对应的图表类型(比如折线图),手动设置坐标轴的刻度值(对照图片上的刻度输入)。
- 逐个点击图表上的数据点,工具会自动记录坐标对应的数值。
- 导出数据为CSV或Excel文件。
内容的提问来源于stack exchange,提问作者jacques
相关产品推荐
相关产品推荐

