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

rvest爬取丹麦议会网站缺失最新数据及LIU委员会链接问题

问题排查与修复方案

问题1:最新数据缺失

产生原因

  • 本地缓存逻辑有漏洞:代码中仅对2021年的页面做了强制重新拉取的处理,其余所有年份只要本地存在已归档的html文件,就直接读取本地旧文件,不会重新向网站发起请求获取最新内容。网站后续新增的议程条目不会出现在旧归档文件中,自然无法被抓取。
  • 时间范围设置过时:代码中设置的爬取年份上限last.yr=2022,未覆盖2023年及之后的新会期内容。
  • 旧归档文件中的总结果数、分页信息都是首次爬取时的历史数据,就算后续网站新增条目,基于旧数据计算的分页数量也会偏少,无法遍历到新内容所在的位置。

解决方案

  • 统一所有年份的缓存刷新逻辑,给本地缓存设置7天的有效期,过期自动重新拉取页面覆盖旧文件,无需单独给2021年写特殊逻辑。
  • 将爬取年份上限last.yr调整为当前年份,覆盖所有新会期。
  • 拉取新页面时重新计算总结果数和分页数,保证分页遍历完整。

问题2:LIU委员会议程链接提取错误

产生原因

  • 给LIU委员会单独写的链接提取规则范围过宽:选择器.column-documents__link会匹配页面中所有带该class的元素,包括面包屑导航、侧边栏、页脚的链接,其中根路径/被拼接域名后就变成了https://www.ft.dk/。
  • 提取时加了unique()去重,打乱了链接顺序,和之前抓取的标题、日期无法对应,最终返回大量无效根域名链接。
  • LIU页面的DOM结构和其他委员会没有本质差异,不需要单独写提取规则,通用的精准定位规则完全适用。

解决方案

  • 删除LIU、FOU、GRU等委员会的单独提取分支,统一用「先定位每条议程的父容器,再从容器内提取对应字段」的逻辑,从根源上避免日期、标题、链接长度不匹配、顺序错位的问题。
  • 链接提取统一用精准选择器定位标题列下的a标签,不要用宽范围选择器抓无关元素。

附加:CSS选择器报错原因

你写的选择器.highlighted .column-documents__icon-text']末尾多了一个多余的右单引号和方括号,属于CSS语法错误,所以触发tokenize报错。另外这个选择器定位的是文本容器,不是a标签,就算语法正确也拿不到href属性。


修正后的核心代码片段

缓存逻辑替换

# 统一缓存刷新规则,删除原来单独判断2021年的分支
refresh_cycle <- 7 # 本地缓存7天过期
if (file.exists(file.name)) {
  file_mtime <- file.info(file.name)$mtime
  if (difftime(Sys.time(), file_mtime, units = "days") > refresh_cycle) {
    page <- read_html(final.url)
    write(as.character(page), file = file.name)
    Sys.sleep(2 + rpois(1, 2))
  } else {
    page <- read_html(file.name)
  }
} else {
  page <- read_html(final.url)
  write(as.character(page), file = file.name)
  Sys.sleep(2 + rpois(1, 2))
}

字段提取逻辑替换

# 删除原来分委员会判断标题、链接的分支,统一提取逻辑
# 先定位每条议程的父容器,保证三个字段长度、顺序完全匹配
items <- page %>% html_elements(".document-list__item, tr") %>% 
  discard(~length(html_element(.x, "td[data-title='Titel'] a.column-documents__link")) == 0)

dates <- items %>% 
  html_element('.highlighted .column-documents__icon-text') %>% 
  html_text(trim = T)
titles <- items %>% 
  html_element('.column-documents__icon-text') %>% 
  html_text(trim = T)
links <- items %>% 
  html_element('td[data-title="Titel"] a.column-documents__link') %>% 
  html_attr('href') %>% 
  paste0("https://www.ft.dk", .)

内容的提问来源于stack exchange,提问作者Asbjørn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 14:09:18