如何用rvest抓取Twitter视频推文的动态观看量?
解决用rvest抓取Twitter动态内容(观看量)的问题
嘿,我来帮你搞定这个问题~你遇到的核心问题是:rvest只能抓取页面初始加载的静态HTML内容,而Twitter的视频观看量这类数据是通过JavaScript动态渲染出来的,所以直接用rvest肯定拿不到。下面给你两种可行的解决方案:
方案一:用RSelenium模拟浏览器加载动态内容
RSelenium可以模拟真实浏览器的行为(比如执行JavaScript、渲染页面),这样就能获取到动态加载的内容了。具体步骤如下:
- 先安装并加载所需的包:
# 首次运行需要安装 install.packages(c("RSelenium", "rvest", "magrittr")) # 加载包 library(RSelenium) library(rvest) library(magrittr)
- 启动Chrome浏览器驱动(确保你的电脑安装了Chrome,版本和chromedriver匹配,RSelenium通常会自动处理驱动下载):
# 启动驱动,端口可以自定义,避免冲突 driver <- rsDriver(browser = "chrome", port = 4567L) remDr <- driver[["client"]]
- 导航到目标推文页面,等待页面完全加载(根据你的网络情况调整等待时间):
remDr$navigate("https://twitter.com/estrellagalicia/status/993432910584659968") Sys.sleep(5) # 给页面留足够时间渲染动态内容
- 获取渲染后的页面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
- 最后记得关闭浏览器和驱动:
remDr$close() driver[["server"]]$stop()
注意:Twitter的页面结构可能会更新,如果上面的选择器失效了,你可以打开浏览器的开发者工具(F12),重新定位观看量元素的XPath或CSS选择器。
方案二:用Twitter官方API(更稳定可靠)
如果需要批量抓取或者长期使用,推荐用Twitter API v2,通过rtweet包来获取结构化的推文数据,这样就不用依赖页面结构了。不过这个方法需要你先在Twitter开发者平台创建账号和应用,获取API密钥:
- 安装并加载rtweet:
install.packages("rtweet") library(rtweet)
- 完成认证(按照提示输入你的API密钥信息):
auth_setup_default()
- 获取推文的媒体统计数据:
# 获取目标推文的媒体数据,包含观看量 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.
相关产品推荐
相关产品推荐

