使用R抓取实时更新信息:ArcGIS平台英国新冠病例数据爬取求助
嘿,作为刚搞定维基爬取、却卡在ArcGIS仪表盘的新手,我太懂这种摸不着头脑的感觉了!毕竟这类动态加载的地图平台和静态页面完全不是一个路数,下面给你几个实用的技巧,一步步来拆解:
第一步:先搞清楚数据是怎么加载的
ArcGIS仪表盘的内容不是直接写在页面HTML里的,而是通过后台API动态拉取的,所以第一步得用浏览器开发者工具抓这个API:
- 打开目标页面,按下
F12调出开发者工具,切换到「Network」标签页 - 刷新页面,然后在过滤器里选择「XHR」或「Fetch」,这样就能过滤掉图片、CSS这类静态资源,只看数据请求
- 挨个看这些请求的响应内容,找包含英国地方当局和病例数的JSON数据——这类请求的URL里通常会有
FeatureServer或者query关键词,很好识别
第二步:模拟API请求拿数据
找到正确的API接口后,就可以用你熟悉的工具(比如Python的requests库)来模拟请求了:
- 回到开发者工具的请求详情,复制完整的请求URL、请求方法(一般是GET),还有请求头里的
User-Agent(用来伪装成浏览器,避免被拦截) - 写一段简单的代码来请求并解析数据,比如:
import requests import json # 替换成你找到的API接口URL api_url = "这里填你抓到的API地址" 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 = json.loads(response.text) # 从JSON里提取你需要的字段,字段名要根据实际响应调整 for item in data["features"]: attributes = item["attributes"] local_authority = attributes["LocalAuthority"] # 替换成实际的字段名 case_count = attributes["CovidCases"] # 替换成实际的字段名 print(f"{local_authority}: {case_count}")
注意:字段名要从你抓到的JSON响应里找,比如可能是Name、CasesTotal这类,得自己对应上。
第三步:处理数据分页(如果需要)
有些ArcGIS API会限制单次返回的条数(比如默认最多1000条),如果数据量超过这个数,就得用分页参数来获取全部数据:
- 在请求URL里添加
&resultOffset=0&resultRecordCount=2000,其中resultOffset是起始位置,resultRecordCount是单次返回的条数 - 循环递增
resultOffset(比如每次加2000),直到返回的数据为空,就说明已经拿到所有数据了
第四步:注意合规和反爬
- 不要疯狂刷请求:每次请求之间加个
time.sleep(1)之类的间隔,别给服务器添乱,也防止被IP封禁 - 先看网站的使用条款:确认这类数据是否允许爬取,遵守规则总是没错的
内容的提问来源于stack exchange,提问作者sim
相关产品推荐
相关产品推荐

