使用R包rvest下载分页表格数据时出现重复数据问题
问题原因及解决方法
你的问题主要来自两个关键点:
1. 分页参数的计数逻辑误解
很多基于Drupal Views搭建的站点,分页参数page是从0开始计数的:
- 不带
page参数的默认链接,实际对应page=0(第一页) page=1才是第二页
如果你的测试中不带参数和page=1返回相同内容,说明该站点的page参数是从1开始计数的——不带参数默认就是page=1(第一页),第二页需要用page=2。
2. 未维持会话状态
部分站点的分页依赖会话Cookie验证,直接用read_html发起独立请求会被服务器视为新会话,不管page参数是多少,都会返回第一页内容。这时候必须用会话对象维持请求状态。
修正后的代码
library(rvest) # 注意URL必须用引号包裹(你的原始代码遗漏了引号,属于语法错误) link_base <- "https://econservation.jrc.ec.europa.eu/recordeddonors?title_selective=All&field_project_year_value_selective=All" # 初始化会话,先访问初始页面获取必要的会话Cookie session <- session(link_base) get_content <- function(page_num) { page_url <- paste0(link_base, "&page=", page_num) print(page_url) # 使用会话对象跳转目标页面,维持会话状态 page <- session %>% session_jump_to(page_url) table <- page %>% html_nodes(xpath='//*[@id="views-aggregator-datatable"]') %>% html_table() return(table[[1]]) } # 测试获取前两页:如果站点page从0开始,用c(0,1);如果从1开始,用c(1,2) tables <- lapply(c(0, 1), get_content)
内容的提问来源于stack exchange,提问作者karpfen
相关产品推荐
相关产品推荐

