使用R的rvest、polite包爬取Etsy商品信息返回空值如何解决
问题原因
- 请求路径与参数错误:你直接向Etsy根路径发起请求,且直接沿用了cheese网站的查询参数
t,但Etsy搜索的对应路径为/search,关键词查询参数为q,参数和路径均不匹配,自然无法返回目标搜索页面 - 页面节点选择错误:Etsy的页面结构不存在
#main-body节点,商品标题也不是全局无属性的h3标签,选择器完全不匹配目标内容,所以返回空值
修正后的可运行代码
library(polite) library(rvest) library(purrr) # 自定义爬取函数,入参为爬取页数、搜索关键词 scrape_etsy <- function(pages = 1, keyword = "Christmas candle") { # 初始化Etsy搜索会话 session <- bow("https://www.etsy.com/search", force = TRUE) # 循环爬取多页内容并整合为数据框 map_dfr(1:pages, function(current_page) { # 构造搜索请求参数 page_content <- scrape(session, query = list( q = keyword, order = "most_relevant", view_type = "gallery", page = current_page )) # 提取当前页商品标题、搜索结果页展示的短描述 titles <- page_content %>% html_nodes(".v2-listing-card__title") %>% html_text2() short_descriptions <- page_content %>% html_nodes(".v2-listing-card__description") %>% html_text2() return(data.frame( page = current_page, title = titles, short_description = short_descriptions, stringsAsFactors = FALSE )) }) } # 测试爬取1页搜索结果 result_etsy <- scrape_etsy(pages = 1) head(result_etsy)
注意事项
- 爬取前请确认Etsy的robots.txt规则允许爬取对应内容,控制爬取频率避免IP被封禁
- 电商平台页面结构会不定期更新,若后续返回空值可通过浏览器调试工具重新查找目标内容对应的CSS选择器调整即可
- 若需要获取商品完整描述,需要在上述逻辑中新增商品详情页的爬取步骤
内容的提问来源于stack exchange,提问作者larry77
相关产品推荐
相关产品推荐

