使用R语言rvest爬取carzone二手车搜索结果返回空集问题求助
问题解决方法
核心原因
- 目标页面的车辆列表为JavaScript动态渲染内容,
rvest::read_html()仅能获取未执行JS的静态初始源码,动态生成的车辆条目、你选中的t-plum自定义标签在静态源码中不存在,因此返回空节点集。
方案1:调用搜索API(优先推荐)
网站的车辆数据通过后端接口返回,直接请求接口可高效获取完整数据,无需解析HTML。
library(httr) library(jsonlite) # 构造API请求,pageSize设为200可一次性拉取全部132条结果 api_req <- GET( url = "https://www.carzone.ie/rest/api/vehicle-search", query = list( make = "Toyota", model = "C-HR", vehicleType = "used", page = 1, pageSize = 200 ) ) # 解析返回的JSON数据,提取所有车辆详情页链接 res_data <- fromJSON(content(api_req, as = "text")) all_car_hrefs <- paste0("https://www.carzone.ie", res_data$vehicles$adUrl)
运行后all_car_hrefs即可得到全部132条结果的链接。
方案2:无头浏览器渲染后提取
如果需要解析完整渲染后的页面内容,可使用chromote等无头浏览器工具先执行页面JS,再用rvest提取:
library(chromote) library(rvest) library(magrittr) target_url <- "https://www.carzone.ie/used-cars/toyota/c-hr" # 启动无头浏览器加载页面,等待JS渲染完成 chrome_session <- ChromoteSession$new() chrome_session$Page$navigate(target_url) Sys.sleep(3) # 可根据网络速度调整等待时长 # 获取渲染完成的完整HTML full_html <- chrome_session$Runtime$evaluate('document.documentElement.outerHTML')$result$value chrome_session$close() # 提取车辆链接 all_car_hrefs <- read_html(full_html) %>% html_elements('a[data-testid="vehicle-card-image-link"]') %>% html_attr('href') %>% paste0("https://www.carzone.ie", .)
内容的提问来源于stack exchange,提问作者Vinnie Gaul
相关产品推荐
相关产品推荐

