如何爬取Google Public Data指定数据集?页面无明确数据存储位置且无法下载
如何爬取Google Public Data中无法直接下载的数据集?
我想要爬取Google Public Data中的美国各州Capital St相关数据集,但点击页面底部链接后找不到明确的数据存储位置,而且该平台不支持直接下载,请问有没有可行的爬取方法?
嘿,我之前碰到过类似的问题,给你几个实用的解决方案:
1. 抓后台API请求(最推荐)
Google Public Data的页面数据基本都是通过后台API加载的,用浏览器开发者工具就能轻松抓到:
- 打开目标页面,右键选「检查」(或者按F12)打开开发者工具;
- 切换到「Network」标签,刷新页面;
- 在搜索框里输入
json,很快就能找到返回数据集的API请求; - 点进去看「Response」标签,就能看到结构化的JSON数据,直接复制保存就行;
- 要是需要批量获取或者自动化处理,把请求URL复制出来,用Python的
requests库调用即可,示例代码如下:
import requests import json # 替换成你从开发者工具复制的真实API地址 api_endpoint = "这里放抓到的API URL" res = requests.get(api_endpoint) data = res.json() # 将数据保存到本地文件 with open("state_capital_data.json", "w") as f: json.dump(data, f, indent=2)
2. 直接解析页面渲染的元素
如果API不好抓(比如参数复杂或有简单加密),可以直接提取页面上显示的数据:
- 用
BeautifulSoup这类HTML解析库,定位页面里存储数据的元素; - 把文本内容提取出来整理成结构化数据,示例代码:
from bs4 import BeautifulSoup import requests import json target_url = "目标页面的URL" # 添加User-Agent模拟真实浏览器,避免被拦截 page_res = requests.get(target_url, 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"}) soup = BeautifulSoup(page_res.text, "html.parser") # 这里的class要根据实际页面结构调整,可通过开发者工具定位元素 data_rows = soup.find_all("div", class_="chart-data-row") final_data = [] for row in data_rows: state_name = row.find("span", class_="state-label").text.strip() capital_value = row.find("span", class_="metric-value").text.strip() final_data.append({"state": state_name, "Capital_St": capital_value}) # 保存整理后的数据 with open("state_data.json", "w") as f: json.dump(final_data, f, indent=2)
3. 动态渲染页面的处理
如果数据是通过JavaScript动态加载的(比如滚动页面才加载更多),上面的方法可能抓不全,这时候可以用Selenium或者Playwright模拟浏览器操作:
- 模拟浏览器打开页面,等待所有数据加载完成;
- 再提取页面元素,这种方法更贴近用户真实操作,能绕过大部分动态渲染的问题。
重要提醒
- 一定要遵守Google的使用条款,不要频繁发送请求,避免触发反爬机制;
- 记得给请求加
User-Agent头,模拟真实浏览器,不然容易被拦截; - 大部分公开数据集的API不需要登录认证,但如果碰到需要参数验证的情况,可以研究请求里的参数规律。
内容的提问来源于stack exchange,提问作者wwl
相关产品推荐
相关产品推荐

