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

Python爬取罗德岛新冠疫苗数据遇异常HTML问题求助

解决罗德岛卫生署疫苗接种数据爬取问题

我之前也碰过类似ArcGIS Hub网站的爬取坑,直接请求页面拿不到实际数据太正常了——这类网站的数据是动态加载的,你用requests.get拿到的其实是页面的框架配置(那串URL编码后的JSON内容),真正的疫苗数据是通过后续的AJAX/API请求异步获取的,根本没嵌在初始HTML里,所以BeautifulSoup自然找不到目标内容。

下面是具体的解决步骤,亲测有效:

1. 找到承载数据的真实API接口

打开浏览器开发者工具(按F12),切换到「Network」面板,然后刷新罗德岛卫生署的疫苗页面:

  • 点击面板顶部的「XHR/Fetch」过滤按钮,只看动态数据请求;
  • 找名字里带「vaccine」「dose」「vaccination」这类关键词的请求;
  • 点进请求看「Response」标签页,确认里面是否包含你要的「已接种1剂疫苗人数」数据。

这类ArcGIS公共服务的API地址通常长这样:https://services.arcgis.com/[一串ID]/ArcGIS/rest/services/[服务名称]/FeatureServer/[图层ID]/query,返回的是标准JSON格式。

2. 直接请求API获取结构化数据

找到正确的API后,不用再折腾HTML解析,直接用requests请求这个API就行。记得加个模拟浏览器的请求头,避免被服务器当成机器人拦截。

给你一个示例代码(需要替换成你实际找到的API地址和字段名):

import requests

# 替换成你在开发者工具里找到的真实API地址
api_url = "https://services.arcgis.com/xxxxxx/ArcGIS/rest/services/COVID_Vaccinations_RI/FeatureServer/0/query"

# 构造请求参数,根据API的实际要求调整
params = {
    "where": "1=1",  # 条件为真,获取所有数据(如果需要特定时间范围可修改)
    "outFields": "One_Dose_Count",  # 替换为存储「已接种1剂」数据的真实字段名
    "returnGeometry": False,  # 不需要地理信息,减少数据量加快请求
    "f": "json"  # 指定返回JSON格式
}

# 模拟浏览器请求头
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, params=params, headers=headers)
vaccine_data = response.json()

# 提取目标数据(根据实际的JSON结构调整)
if vaccine_data.get("features"):
    one_dose_count = vaccine_data["features"][0]["attributes"]["One_Dose_Count"]
    print(f"罗德岛已接种1剂疫苗人数: {one_dose_count}")
else:
    print("未找到目标数据,请检查API参数或字段名是否正确")

3. 额外注意事项

  • 如果API需要特定参数(比如指定最新日期的数据),直接复制开发者工具里原请求的参数就行;
  • 公共数据接口一般不需要token验证,但如果遇到权限问题,可以查看原请求的请求头是否有额外标识;
  • 这类政府接口偶尔会调整地址或字段名,建议定期验证API的可用性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:15:40