You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何自动化采集DataWrapper美国郡县地图数据生成CSV数据库?

实现DataWrapper美国郡县地图数据自动化导出为CSV的方法

完全可行,结合你的Python基础,按下面的步骤操作就能搞定:

一、优先抓API接口(最省事的方法)

DataWrapper的可视化数据大多是通过API接口加载的,比直接解析DOM效率高:

  1. 打开浏览器开发者工具(F12),切换到Network标签页,勾选XHR/Fetch过滤选项
  2. 刷新地图页面,观察加载的请求,找包含data、county或类似关键词的请求(一般是JSON格式)
  3. 点击该请求,查看Response内容,如果里面包含所有郡县的名称、对应数值等你需要的信息,直接复制请求URL
  4. 用Python的requests库请求这个URL,解析JSON后写入CSV:
import requests
import csv

# 替换成你找到的API接口URL
api_url = "https://api.datawrapper.de/v3/charts/xxx/data"
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"
}

response = requests.get(api_url, headers=headers)
data = response.json()

# 假设数据是列表格式,每个元素是一个郡县的信息
with open("county_data.csv", "w", newline="", encoding="utf-8") as f:
    writer = csv.writer(f)
    # 写入表头,根据实际JSON结构调整
    writer.writerow(["郡县名称", "数值1", "数值2"])
    for item in data:
        # 根据JSON里的字段名提取内容,比如item["name"], item["value1"]
        writer.writerow([item["name"], item["value1"], item["value2"]])

二、从页面内嵌DOM/JSON提取

如果找不到独立的API接口,DataWrapper通常会把完整数据内嵌在页面的<script>标签里:

  1. 切换到开发者工具的Elements标签页,按Ctrl+F搜索window.datawrapper或者dw-data关键词
  2. 找到包含所有郡县数据的JSON片段,复制出来(注意要处理掉多余的JS语法,只保留纯JSON部分)
  3. 用Python的json库解析,再写入CSV,示例代码:
import json
import csv

# 把复制到的JSON内容存到变量里(或者读取本地文件)
raw_json = '''{"data": [{"name": "xxx", "value": 123}, ...]}'''
data = json.loads(raw_json)

with open("county_data.csv", "w", newline="", encoding="utf-8") as f:
    writer = csv.writer(f)
    writer.writerow(["郡县名称", "数值"])
    for county in data["data"]:
        writer.writerow([county["name"], county["value"]])

三、动态交互数据提取(点击郡县才加载的情况)

如果数据是点击郡县后才动态加载的,用Selenium模拟浏览器操作:

  1. 安装Selenium和对应浏览器的驱动(比如ChromeDriver)
  2. 编写代码模拟点击每个郡县,提取弹窗或DOM更新的信息:
from selenium import webdriver
from selenium.webdriver.common.by import By
import csv

driver = webdriver.Chrome()
driver.get("你的DataWrapper地图页面URL")

# 假设所有郡县的元素选择器是".county-path"(需要根据实际页面调整)
county_elements = driver.find_elements(By.CSS_SELECTOR, ".county-path")

with open("county_data.csv", "w", newline="", encoding="utf-8") as f:
    writer = csv.writer(f)
    writer.writerow(["郡县名称", "详情数值"])
    for elem in county_elements:
        elem.click()
        # 等待信息加载,提取目标元素的文本(比如详情框的选择器是".county-info")
        county_name = driver.find_element(By.CSS_SELECTOR, ".county-name").text
        county_value = driver.find_element(By.CSS_SELECTOR, ".county-value").text
        writer.writerow([county_name, county_value])

driver.quit()

注意事项

  • 遵守DataWrapper的使用条款,不要爬取受版权保护的数据
  • 请求接口时添加User-Agent头,模拟正常浏览器访问,避免被拦截
  • 如果遇到反爬,可以适当添加请求间隔(用time.sleep())

内容的提问来源于stack exchange,提问作者Edson Floriano

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 12:35:24