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

修复用于提取不同URL对应亚马逊商品评论的For循环错误

错误原因分析
  • 动态变量赋值语法错误:无法直接将paste0("page_", range)放在赋值符左侧生成变量,R不支持该写法,需要用assign()函数实现动态变量名创建。同时你这里调用了整个range向量,而非当前循环对应的单个页码,会触发长度不匹配报错。
  • 页码赋值错误:代码中给page字段赋值为paste0("a", i),既没有对应实际页码,还多加了无意义的前缀a。
  • 补充:亚马逊有反爬机制,建议加上异常捕获逻辑,避免某页请求失败直接中断整个循环。
修正后可运行代码

和你原需求一致,生成单独page_xx格式的变量:

library(tidyr)
library(rvest)

# 不要用range做变量名,R内置有range()函数,容易冲突
page_range <- 12:82
# 批量生成所有页的URL
url_list <- paste0("https://www.amazon.it/Philips-HD9260-90-Airfryer-plastica/product-reviews/B07WTHVQZH/ref=cm_cr_getr_d_paging_btm_next_", 
                   page_range ,"?ie=UTF8&reviewerType=all_reviews&pageNumber=", page_range)

for (i in seq_along(url_list)) {
  # 异常捕获,单页爬取失败不中断整体循环
  tryCatch({
    doc <- read_html(url_list[i]) 
    
    # 提取评论标题
    review_title <- doc %>% 
      html_nodes("[class='a-size-base a-link-normal review-title a-color-base review-title-content a-text-bold']") %>%
      html_text()
    
    # 提取评论正文
    review_text <- doc %>% 
      html_nodes("[class='a-size-base review-text review-text-content']") %>%
      html_text()
    
    # 提取评论星级
    review_star <- doc %>%
      html_nodes("[data-hook='review-star-rating']") %>%
      html_text()
    
    # 动态生成对应页码的tibble变量
    current_page <- page_range[i]
    assign(paste0("page_", current_page), 
           tibble(review_title,
                  review_text,
                  review_star,
                  page = current_page))
  }, error = function(e) {
    message(paste0("第", page_range[i], "页爬取失败,错误信息:", e$message))
  })
}
更优方案:直接合并为单张总表

不需要生成几十个分散的变量,直接把所有页结果存在一个总tibble里,后续清洗分析更方便:

library(tidyr)
library(rvest)
library(purrr)

page_range <- 12:82
url_list <- paste0("https://www.amazon.it/Philips-HD9260-90-Airfryer-plastica/product-reviews/B07WTHVQZH/ref=cm_cr_getr_d_paging_btm_next_", 
                   page_range ,"?ie=UTF8&reviewerType=all_reviews&pageNumber=", page_range)

# 定义单页爬取函数
scrape_single_page <- function(url, page_num) {
  tryCatch({
    doc <- read_html(url)
    review_title <- doc %>% 
      html_nodes("[class='a-size-base a-link-normal review-title a-color-base review-title-content a-text-bold']") %>%
      html_text()
    review_text <- doc %>% 
      html_nodes("[class='a-size-base review-text review-text-content']") %>%
      html_text()
    review_star <- doc %>%
      html_nodes("[data-hook='review-star-rating']") %>%
      html_text()
    return(tibble(review_title, review_text, review_star, page = page_num))
  }, error = function(e) {
    message(paste0("第", page_num, "页爬取失败:", e$message))
    return(tibble())
  })
}

# 批量爬取并按行合并为总表
all_reviews <- map2_dfr(url_list, page_range, scrape_single_page)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 16:54:02