使用R语言抓取速卖通页面商品仅返回前10个的问题求助
问题原因与解决方案
速卖通商品列表采用懒加载机制:初始仅渲染前10个商品,剩余商品需要滚动页面触发后端加载。你用read_html直接获取的是页面初始静态HTML,自然只能拿到前10条数据。
解决方法:用RSelenium模拟浏览器加载全部内容
RSelenium可以模拟真实浏览器的行为,包括滚动页面触发懒加载,从而获取完整的商品列表。
步骤与代码示例
- 安装并加载依赖包:
install.packages(c("RSelenium", "rvest", "dplyr")) library(RSelenium) library(rvest) library(dplyr)
- 启动Chrome浏览器驱动(需提前安装对应版本的chromedriver):
driver <- rsDriver(browser = "chrome", port = 4567L) remDr <- driver[["client"]]
- 打开目标页面并模拟滚动加载所有商品:
AlPage <- "https://www.aliexpress.com/w/wholesale-running-shoes.html?SearchText=running+shoes&catId=0&g=n&initiative_id=SB_20230318171033&sortType=total_tranpro_desc&spm=a2g0o.home.1000002.0&trafficChannel=main" remDr$navigate(AlPage) # 循环滚动直到所有商品加载完成 repeat { # 滚动到页面底部 remDr$executeScript("window.scrollTo(0, document.body.scrollHeight);") # 等待2秒让新内容加载 Sys.sleep(2) # 记录当前已加载的商品数量 current_count <- length(remDr$findElements(using = "css selector", ".manhattan--title--24F0J-G, .cards--title--2rMisuY")) # 再次等待后检查数量,无变化则说明加载完成 Sys.sleep(2) new_count <- length(remDr$findElements(using = "css selector", ".manhattan--title--24F0J-G, .cards--title--2rMisuY")) if(current_count == new_count) break }
- 提取完整页面内容并解析商品名称:
# 获取加载完成后的页面HTML page_source <- remDr$getPageSource()[[1]] url <- read_html(page_source) # 提取所有商品名称 alproduct_name <- html_nodes(url,".manhattan--title--24F0J-G, .cards--title--2rMisuY") %>% html_text2() print(alproduct_name)
- 关闭浏览器驱动:
remDr$close() driver$server$stop()
注意事项
- 需确保浏览器驱动版本与本地浏览器版本匹配,否则无法正常启动。
- 可根据网络速度调整等待时间,避免因加载不充分导致数据缺失。
- 速卖通存在反爬机制,频繁操作可能触发限制,建议适当延长滚动间隔。
内容的提问来源于stack exchange,提问作者miat3
相关产品推荐
相关产品推荐

