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

如何用rvest抓取Twitter视频推文的动态观看量?

解决用rvest抓取Twitter动态内容(观看量)的问题

嘿,我来帮你搞定这个问题~你遇到的核心问题是:rvest只能抓取页面初始加载的静态HTML内容,而Twitter的视频观看量这类数据是通过JavaScript动态渲染出来的,所以直接用rvest肯定拿不到。下面给你两种可行的解决方案:

方案一:用RSelenium模拟浏览器加载动态内容

RSelenium可以模拟真实浏览器的行为(比如执行JavaScript、渲染页面),这样就能获取到动态加载的内容了。具体步骤如下:

  1. 先安装并加载所需的包:
# 首次运行需要安装
install.packages(c("RSelenium", "rvest", "magrittr"))

# 加载包
library(RSelenium)
library(rvest)
library(magrittr)
  1. 启动Chrome浏览器驱动(确保你的电脑安装了Chrome,版本和chromedriver匹配,RSelenium通常会自动处理驱动下载):
# 启动驱动,端口可以自定义,避免冲突
driver <- rsDriver(browser = "chrome", port = 4567L)
remDr <- driver[["client"]]
  1. 导航到目标推文页面,等待页面完全加载(根据你的网络情况调整等待时间):
remDr$navigate("https://twitter.com/estrellagalicia/status/993432910584659968")
Sys.sleep(5) # 给页面留足够时间渲染动态内容
  1. 获取渲染后的页面HTML,再用rvest解析提取观看量:
# 获取页面源码
page_source <- remDr$getPageSource()[[1]]
tweet_page <- read_html(page_source)

# 用XPath选择器提取观看量(找"Views"元素的前一个兄弟节点,这个选择器相对稳定)
view_count <- tweet_page %>% 
  html_element(xpath = "//div[contains(text(), 'Views')]/preceding-sibling::div") %>% 
  html_text()

print(view_count) # 应该会输出你要的44K
  1. 最后记得关闭浏览器和驱动:
remDr$close()
driver[["server"]]$stop()

注意:Twitter的页面结构可能会更新,如果上面的选择器失效了,你可以打开浏览器的开发者工具(F12),重新定位观看量元素的XPath或CSS选择器。

方案二:用Twitter官方API(更稳定可靠)

如果需要批量抓取或者长期使用,推荐用Twitter API v2,通过rtweet包来获取结构化的推文数据,这样就不用依赖页面结构了。不过这个方法需要你先在Twitter开发者平台创建账号和应用,获取API密钥:

  1. 安装并加载rtweet:
install.packages("rtweet")
library(rtweet)
  1. 完成认证(按照提示输入你的API密钥信息):
auth_setup_default()
  1. 获取推文的媒体统计数据:
# 获取目标推文的媒体数据,包含观看量
tweet_data <- get_tweets("993432910584659968", 
                         expansions = "attachments.media_keys", 
                         media_fields = "public_metrics")

# 提取视频观看量
view_count <- tweet_data$media_public_metrics_view_count
print(view_count)

这个方法的优势是数据准确、稳定,不会因为页面更新而失效,适合专业的数据抓取需求。

内容的提问来源于stack exchange,提问作者Mario M.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 10:03:17