如何用Python抓取网页中的图表数据?以指定网站为例
抓取动态图表数据的Python实现方案
你的代码无法找到图表内容,核心原因是该网站的图表是通过JavaScript动态渲染生成的——requests只能获取页面的静态HTML源码,而图表数据是页面加载后通过JS异步加载并渲染的,静态源码里根本没有这些数据。
可以用Python实现抓取,下面提供两种可行方案:
方案一:用Selenium模拟浏览器渲染页面
Selenium可以模拟真实浏览器加载页面,等待JS执行完成后再获取渲染后的内容,适合直接提取页面上的图表数据元素。
步骤:
- 安装依赖:
pip install selenium
- 下载对应浏览器的驱动(比如ChromeDriver,需和浏览器版本匹配),并配置到环境变量或指定路径。
示例代码:
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC url = 'http://www.mahallemistanbul.com/MahallemSEGE_/' # 初始化Chrome浏览器驱动(需确保ChromeDriver路径正确) driver = webdriver.Chrome() driver.get(url) # 等待图表相关元素加载完成(根据实际元素调整等待条件) try: # 替换为页面中实际的图表容器选择器(比如ID、类名) chart_container = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.CLASS_NAME, "chart-container")) ) # 若图表是SVG格式,可直接提取文本数据;若为Canvas,需从JS变量或接口获取数据 svg_content = chart_container.find_element(By.TAG_NAME, "svg") print(svg_content.text) finally: driver.quit()
方案二:直接抓取图表的数据源接口
很多动态图表的数据是通过AJAX请求从后端接口获取的,直接请求这个接口获取原始数据(通常是JSON格式),效率比模拟浏览器更高。
步骤:
- 打开浏览器开发者工具(按F12),切换到「Network」标签页。
- 刷新目标页面,在「XHR」或「Fetch」分类下查找包含图表数据的请求(URL通常含
data、chart等关键词)。 - 复制该请求的URL、请求头和参数,用
requests直接发送请求获取数据。
示例代码:
import requests # 替换为你找到的实际数据源接口URL data_api_url = "http://www.mahallemistanbul.com/MahallemSEGE_/api/chart-data" headers = { # 复制浏览器请求头中的必要字段,比如User-Agent "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" } response = requests.get(data_api_url, headers=headers) if response.status_code == 200: chart_data = response.json() print(chart_data) else: print(f"请求失败,状态码:{response.status_code}")
内容的提问来源于stack exchange,提问作者datasever
相关产品推荐
相关产品推荐

