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

如何抓取mtgstocks.com不可抓取页面?获取卡牌名称与系列信息

解决MTGStocks页面爬取无结果的问题

你的问题出在网站内容是JavaScript动态渲染的,直接用httr::GET获取的是未加载动态内容的静态HTML,自然找不到目标元素。下面提供两种可行的解决方案:

方案1:使用RSelenium(模拟真实浏览器)

RSelenium会启动真实浏览器加载页面,等待JS渲染完成后再获取内容,步骤如下:

# 首次运行先安装依赖包
install.packages(c("RSelenium", "rvest"))

library(RSelenium)
library(rvest)

# 启动Chrome会话(需提前安装对应版本的ChromeDriver并配置到系统PATH)
driver <- rsDriver(browser = "chrome", chromever = "126.0.6478.126") # 替换为你的Chrome版本
remDr <- driver[["client"]]

# 加载目标页面
remDr$navigate("https://www.mtgstocks.com/prints/1")

# 等待JS加载完成(根据网络情况调整等待时间)
Sys.sleep(3)

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

# 提取卡牌名称和系列(CSS选择器需根据页面实际结构调整)
card_name <- page_html %>% 
  html_nodes("h3.card-name a") %>% 
  html_text()

card_set <- page_html %>% 
  html_nodes("div.set-name") %>% 
  html_text()

# 输出结果
cat("卡牌名称:", card_name, "\n")
cat("卡牌系列:", card_set, "\n")

# 关闭浏览器会话
remDr$close()
driver$server$stop()

方案2:使用Chromote(轻量无头浏览器)

Chromote基于Chrome DevTools协议,无需完整浏览器环境,更适合服务器端运行:

# 首次运行安装依赖包
install.packages(c("chromote", "rvest"))

library(chromote)
library(rvest)

# 启动无头Chrome会话
b <- ChromoteSession$new()

# 加载页面并等待加载完成
b$Page$navigate("https://www.mtgstocks.com/prints/1")
b$Page$loadEventFired(wait_ = TRUE)

# 获取渲染后的页面源码
page_source <- b$Runtime$evaluate("document.documentElement.outerHTML")$result$value
page_html <- read_html(page_source)

# 提取目标信息
card_name <- page_html %>% 
  html_nodes("h3.card-name a") %>% 
  html_text()

card_set <- page_html %>% 
  html_nodes("div.set-name") %>% 
  html_text()

# 输出结果
cat("卡牌名称:", card_name, "\n")
cat("卡牌系列:", card_set, "\n")

# 关闭会话
b$close()

注意事项

  • 确认CSS选择器:可以通过浏览器F12开发者工具,查看渲染后的元素结构,复制正确的CSS选择器(比如如果页面结构有变动,需对应调整选择器)。
  • 遵守网站规则:不要高频次爬取,避免触发反爬机制导致IP被封禁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 18:20:34