rvest调用follow_link跳转分页始终返回同一页面问题求助
故障原因
- 包引用错误:代码中加载包时写的
htTR大小写错误,正确应为httr,未正确加载依赖包会导致会话管理异常。 - 会话状态缺失:你直接通过
jump_to跳转到第二页搜索地址,没有模拟正常用户先执行搜索操作的流程,站点后台未给当前会话绑定对应的搜索上下文参数,访问后续分页时会被强制重定向回搜索结果首页。 - 分页链接识别失效:部分站点的分页地址不会直接写在静态HTML的a标签属性中,而是通过JS动态生成跳转逻辑,
rvest本身不支持执行JS代码,follow_link只能读取静态写死的href属性,拿到的可能是无效链接或者第一页地址。 - CSS选择器匹配错误:你使用的
".number-pages-container span:nth-child(2) a"选择器可能匹配到了非目标元素,比如第一页的页码标签,导致跳转回第一页。 - 反爬策略限制:站点检测到非浏览器请求时,会主动重定向分页请求到第一页,需要补充更多请求头参数比如referer、cookie等模拟正常用户行为。
修复方案
- 先修正依赖包加载的大小写错误,确保httr正常加载。
- 先模拟正常搜索流程,而非直接跳转到分页地址,让会话拿到完整的搜索上下文:
library(tidyverse) library(rvest) library(httr) base_url = "https://www.milenio.com" UserAgent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36" MySession = html_session( url = base_url, user_agent(UserAgent) ) # 先进入搜索页提交搜索参数,而非直接跳分页 search_page <- MySession %>% jump_to("buscador") %>% html_form() %>% # 匹配搜索表单填入关键词 .[[1]] %>% set_values(text = "violencia") %>% submit_form(MySession, .) # 验证第一页内容后再翻页 print(search_page$url)
- 翻页前先校验匹配到的分页链接是否正确:
# 先打印你选中的分页链接地址,确认是否为第二页地址 target_link <- search_page %>% html_element(".number-pages-container span:nth-child(2) a") %>% html_attr("href") print(target_link)
如果打印出的链接不是预期的第二页地址,说明站点分页是JS动态渲染,你可以直接构造分页地址批量请求,格式为https://www.milenio.com/buscador/page/[页码]?text=violencia,直接通过jump_to按页码循环请求即可,不需要调用follow_link。
内容的提问来源于stack exchange,提问作者renorosgon
相关产品推荐
相关产品推荐

