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

robotstxt返回FALSE时,如何绕过剑桥公卫网站的爬取限制?

剑桥市COVID-19 Shiny网站爬取方案

1. 优先用模拟用户操作导出数据

这是最合规的方式——既然手动复制是允许的,用工具模拟点击下载按钮和手动操作没有区别,完全符合网站的公共数据服务意图:

  • 用RSelenium或playwright启动浏览器,模拟访问网站、点击下载按钮的流程
  • 示例代码(RSelenium):
library(RSelenium)
library(tidyverse)

# 启动Chrome驱动(需提前安装ChromeDriver并配置环境变量)
driver <- rsDriver(browser = "chrome", port = sample(4000:5000, 1))
remDr <- driver[["client"]]

# 打开目标网站
remDr$navigate("https://cityofcambridge.shinyapps.io/COVID19/")

# 等待页面加载完成(可根据实际情况调整等待时间)
Sys.sleep(3)

# 定位下载按钮(需替换为实际按钮的CSS选择器,可通过浏览器开发者工具查看)
download_btn <- remDr$findElement(using = "css", value = ".btn-download")
download_btn$clickElement()

# 等待下载完成,读取文件
download_path <- file.path(Sys.getenv("HOME"), "Downloads")
latest_file <- list.files(download_path, pattern = "covid.*\\.csv", full.names = TRUE) %>% 
  arrange(file.mtime(.)) %>% last()
covid_data <- read_csv(latest_file)

# 清理资源
remDr$close()
driver$server$stop()

2. 针对静态内容的爬取(忽略robotstxt)

如果页面部分数据是静态渲染的,可直接用httr+rvest请求,同时模拟浏览器UA,忽略robotstxt限制:

library(rvest)
library(httr)

# 设置浏览器用户代理,避免被识别为爬虫
ua <- "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36"

# 发送请求
resp <- GET("https://cityofcambridge.shinyapps.io/COVID19/", user_agent(ua))
page <- read_html(resp)

# 解析数据(示例:提取页面标题)
page_title <- page %>% html_element("title") %>% html_text()

注意:Shiny应用大多是动态渲染,这种方法可能拿不到实际的表格数据,还是模拟浏览器更可靠。

3. 合规性注意事项

  • 控制请求频率:每天只爬一次,和手动更新频率一致,别给服务器加负担
  • 数据仅用于内部分析,不要商用,符合网站的公共服务定位
  • 最好直接联系剑桥市公共卫生部门,询问是否有官方数据接口,这是最稳妥的长期方案

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 00:03:18