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

R中purrr::map配合polite爬取多页仅重复返回第一页问题

错误原因

代码重复返回第一页结果,是两处传参逻辑错误导致的:

  • 对polite包的scrape()函数参数理解有误:你提前把分页参数拼接到了obr_polite_pg向量的URL中,但调用scrape()时传入的query = list(i = .x)是无效参数——站点识别分页的查询字段是page,不是i,而且你把完整URL作为i的参数值传递,根本不会被站点识别。
  • scrape()默认基于bow()初始化时传入的基础URL发起请求,错误的query参数不会覆盖基础请求地址,最终所有请求都落到了无分页参数的第一页地址上。
修正代码

两种实现方式二选一即可:

方式一:使用预构造的完整分页URL

library(magrittr)
library(rvest)
library(polite)
library(purrr)

# 分页URL构造逻辑正确,可直接使用
obr_polite_pg <- paste0("https://onebite.app/reviews/fans?page=", seq(1:3), "&minScore=0&maxScore=10")

session <- bow("https://www.onebite.app/reviews/fans", force = TRUE, user_agent = "matthewramsdell@icloud.com")

# 直接通过url参数传入目标分页地址,移除错误的query传参
obr_responses <- map(obr_polite_pg, ~scrape(session, url = .x))

obr_rctitle <- map(obr_responses, ~html_elements(.x, ".reviewCard__title") %>% 
                                 html_text())   

方式二:通过query参数传递分页规则

不需要提前拼接URL,直接在scrape()中传入和站点匹配的查询参数即可:

library(magrittr)
library(rvest)
library(polite)
library(purrr)

session <- bow("https://www.onebite.app/reviews/fans", force = TRUE, user_agent = "matthewramsdell@icloud.com")

# 遍历页码,query参数名严格和站点要求的字段名对应
obr_responses <- map(1:3, ~scrape(session, query = list(
  page = .x,
  minScore = 0,
  maxScore = 10
)))

obr_rctitle <- map(obr_responses, ~html_elements(.x, ".reviewCard__title") %>% 
                                 html_text())   

注意:爬取时请遵守目标站点的robots协议,控制请求间隔,避免对站点服务造成压力。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 08:45:33