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

使用R语言rvest库爬取Zigbee联盟官网表格失败如何解决?

问题排查
  • 核心原因:目标页面的表格内容是JavaScript动态渲染生成的,rvest::read_html()只能获取服务端返回的原始静态HTML源码,此时页面的表格数据还没被JS加载渲染,所以定位不到任何tr.field_1节点,自然提取失败。
解决方案

这里提供两种可落地的实现方式,优先推荐第一种接口直取方案,不需要模拟浏览器,运行效率更高。

方案1:直接调用数据接口提取

该页面的产品数据通过独立接口返回,直接请求接口就能拿到结构化JSON数据,不需要解析HTML,代码更简洁:

# 加载依赖包
library(httr)
library(jsonlite)
library(dplyr)

# 请求产品数据接口,per_page参数控制单次返回的数据条数
res <- GET("https://zigbeealliance.org/wp-json/v1/products?classic=1&per_page=1000")
# 解析返回的JSON内容
raw_data <- fromJSON(content(res, as = "text"))
# 提取产品列表转为数据框
product_total_df <- raw_data$data %>% as_tibble()

# 按需筛选需要的字段即可得到最终总表,示例如下:
final_table <- product_total_df %>% select(id, product_name = name, manufacturer = company, product_category = category, cert_date = certification_date)

如果站点总产品数超过1000,调大per_page参数或者补充分页请求逻辑即可。

方案2:用RSelenium模拟浏览器加载

如果不想抓包找接口,可以用RSelenium模拟真实浏览器运行,等页面渲染完成后再提取内容:

library(RSelenium)
library(rvest)
library(purrr)

# 启动Chrome驱动,需提前安装和本地Chrome版本匹配的chromedriver
driver <- rsDriver(browser = "chrome", chromever = "你的本地Chrome版本号", port = 4567L)
remDr <- driver$client
# 打开目标页面
remDr$navigate("https://zigbeealliance.org/classic-product-search/")
# 等待页面加载完成,可根据网络情况调整等待时长
Sys.sleep(3)

# 获取渲染完成的页面源码
page_source <- remDr$getPageSource()[[1]]
zb <- read_html(page_source)

# 提取所有表格内容合并为总表
total_table <- zb %>% 
  html_nodes("table") %>% 
  html_table(fill = TRUE) %>% 
  list_rbind()

# 用完关闭驱动释放资源
remDr$close()
driver$server$stop()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 02:09:04