如何用Python抓取Statista网站图表后的戴尔营收数据?
抓取Statista戴尔净营收图表数据的可行思路
我懂你那种用BeautifulSoup翻遍页面源码、找遍JSON文件却一无所获的挫败感——Statista的图表数据藏得确实有点深,毕竟很多是动态渲染或者封装在页面的脚本里的。给你几个亲测有效的方案,你可以试试:
方案1:用Selenium+JavaScript提取页面内的封装数据
Statista很多图表的原始数据其实存在页面的全局JavaScript变量里(比如window.__INITIAL_STATE__或者类似命名的对象),只是没直接暴露在HTML结构里。用Selenium可以模拟浏览器渲染页面,然后执行JS代码把这些数据捞出来:
- 第一步:安装Selenium和对应浏览器的驱动(比如ChromeDriver)
- 第二步:编写代码打开目标页面,等待图表完全加载(可以用
WebDriverWait等待特定元素出现) - 第三步:先在浏览器控制台输入
Object.keys(window),找带chart、data相关的变量;找到后用driver.execute_script("return window.yourTargetVariable")把数据取出来,再转成Python字典处理
举个简化的代码片段:
from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By driver = webdriver.Chrome() driver.get("https://www.statista.com/statistics/264911/dells-net-revenue-since-1996/") # 等待图表容器加载完成 WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CLASS_NAME, "chart-container"))) # 执行JS提取数据(需先在控制台确认变量名再替换) chart_data = driver.execute_script("return window.__INITIAL_STATE__.chartData") print(chart_data) driver.quit()
方案2:仔细排查网络请求里的API数据
你之前找JSON没找到可能是没筛选对请求类型。试试这个步骤:
- 打开目标页面,按F12打开开发者工具,切换到「Network」标签
- 刷新页面,在筛选框输入
data或者revenue,重点看XHR或Fetch类型的请求 - 逐个查看请求的响应内容,大概率能找到包含年份、营收数值的JSON数据(比如有些请求会返回
dataPoints之类的数组) - 找到对应的API接口后,直接用Python的
requests库发送请求获取数据就行(注意要带上必要的请求头,比如User-Agent、Cookie等,避免被拦截)
方案3:考虑Statista官方API(有门槛)
如果上面的方法都不行,Statista其实有官方API可以获取结构化数据,但这个需要注册账号,部分数据可能需要付费订阅。如果只是偶尔抓取少量数据,前面两个方案足够,但如果有长期需求,可以去看看他们的API文档。
⚠️ 注意:抓取前一定要看Statista的使用条款,不要批量高频请求,避免被封IP或者触发反爬机制。
内容的提问来源于stack exchange,提问作者Sibren De Preter
相关产品推荐
相关产品推荐

