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

如何用bs4或其他工具抓取data.census.gov县概况页的9项统计数据?

抓取data.census.gov县概况数据的解决方案

核心结论

  • 完全不需要Java相关知识,你已有的requests、BeautifulSoup就能搞定,必要时可配合selenium。
  • 首页的9项统计数据是异步加载的,不会直接出现在初始HTML里,得换思路:要么抓数据接口,要么等页面渲染完成后再解析。

具体实现方案

方案一:直接抓取数据API(推荐)

这是最高效的方式,比解析页面简单得多:

  1. 找到API接口:打开目标页面,按F12打开浏览器开发者工具,切换到「网络」标签,刷新页面后筛选「Fetch/XHR」类型的请求。你会看到一个返回JSON数据的接口(通常包含profile或summary这类关键词),复制这个接口的URL。
  2. 用requests请求接口:直接调用接口获取数据,提取需要的9项统计值。示例代码:
import requests
import pandas as pd

# 替换为你找到的实际API地址
api_url = "替换为浏览器中找到的API接口URL"
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36"
}

# 发送请求获取JSON数据
response = requests.get(api_url, headers=headers)
data = response.json()

# 提取前9项统计数据(根据实际JSON结构调整路径)
stats = {}
# 假设数据在data['results']['statistics']下,实际要根据接口返回的结构修改
for item in data['results']['statistics'][:9]:
    stats[item['label']] = item['value']

# 转为DataFrame查看
df = pd.DataFrame.from_dict(stats, orient='index', columns=['统计数值'])
print(df)

方案二:用Selenium渲染页面后解析

如果API接口加密或难以定位,可以用selenium模拟浏览器加载页面,等数据渲染完成后再用BeautifulSoup解析:

  1. 先安装selenium:
pip install selenium
  1. 示例代码:
from selenium import webdriver
from bs4 import BeautifulSoup
import pandas as pd

# 初始化浏览器(需要对应版本的ChromeDriver,可从Chrome官网下载)
driver = webdriver.Chrome()
driver.get("https://data.census.gov/profile/Grant_County,_New_Mexico?g=050XX00US35017#populations-and-people")

# 等待页面加载完成(隐式等待10秒,也可以用WebDriverWait做精准等待)
driver.implicitly_wait(10)

# 获取渲染后的页面源码,用BeautifulSoup解析
soup = BeautifulSoup(driver.page_source, 'html.parser')

# 定位统计数据元素(根据页面实际class调整,比如找包含统计值和标签的容器)
stat_containers = soup.find_all('div', class_='profile-stat')[:9]

stats = {}
for container in stat_containers:
    label = container.find('div', class_='stat-title').text.strip()
    value = container.find('div', class_='stat-value').text.strip()
    stats[label] = value

# 转为DataFrame
df = pd.DataFrame.from_dict(stats, orient='index', columns=['统计数值'])
print(df)

# 关闭浏览器
driver.quit()

注意事项

  • 所有请求都要加User-Agent头,避免被网站识别为爬虫拦截。
  • 如果用API方案,一定要先打印data查看JSON结构,找到统计数据的具体路径,再调整代码中的提取逻辑。
  • 不需要去下载原始CSV重新计算,直接抓接口或渲染后的页面就能拿到现成的统计值。

内容的提问来源于stack exchange,提问作者Daniel Zitomer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 09:43:20