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

使用rvest爬取指定网页中心摘要表格失败,求问题排查

问题原因与解决方案

核心原因

你遇到的问题是因为目标页面的中心表格是JavaScript动态加载的:浏览器打开页面时,初始返回的HTML仅包含侧边栏等静态内容,中心表格的数据是页面加载完成后通过AJAX异步请求获取并渲染的。而rvest的read_html()只能抓取页面初始的静态HTML,自然拿不到动态生成的表格。

解决方案

方案1:使用支持JS渲染的爬虫工具(RSelenium)

这类工具会模拟真实浏览器加载页面,等待JS执行完成后再抓取内容,代码示例:

library(RSelenium)
library(rvest)

# 启动Chrome驱动(需提前在系统PATH中配置ChromeDriver)
driver <- rsDriver(browser = "chrome", port = 4567L)
remDr <- driver$client

# 导航到目标页面
remDr$navigate("https://scientific.sparx-ip.net/archiveeular/?c=s&view=2")
# 等待JS渲染完成(根据网络情况调整等待时间)
Sys.sleep(5)

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

# 提取表格(目标表格通常是列表中靠后的元素,可自行查看索引)
tables <- page %>% html_table()
print(tables[[2]])

# 关闭会话,释放资源
remDr$close()
driver$server$stop()

方案2:直接抓取AJAX数据接口(更高效)

通过浏览器开发者工具找到表格数据的来源接口,直接请求接口获取原始数据:

  1. 打开目标页面,按F12打开开发者工具,切换到「Network」标签
  2. 刷新页面,在「XHR」或「Fetch」分类下找到返回表格数据的请求(通常是JSON格式)
  3. 复制该请求的URL,用httr或jsonlite直接请求并解析数据:
library(httr)
library(jsonlite)

# 替换为你找到的真实AJAX接口URL
api_url <- "https://scientific.sparx-ip.net/archiveeular/xxx"
response <- GET(api_url)
data <- fromJSON(content(response, "text"))

# 将JSON数据转换为表格格式
result_table <- as.data.frame(data)
print(result_table)

注意事项

  • 注意遵守网站的robots.txt规则,避免频繁请求触发反爬机制
  • 如果AJAX接口需要携带Cookie或请求参数,需从浏览器请求中复制对应信息后再发起请求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 05:42:20