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

如何用rvest按原顺序抓取YouTube直播聊天的文本与表情?

解决YouTube直播聊天文本与表情顺序保留的抓取方法

核心思路是遍历消息节点下的所有子节点,按原始顺序分别处理文本和表情,再拼接成完整内容,而不是单独提取所有文本和所有表情。

具体代码实现

library(rvest)

# 假设chat_html是你已经获取到的直播聊天页面HTML
messages <- html_elements(chat_html, "#message")

# 定义处理单条消息的函数
process_single_message <- function(msg_node) {
  # 获取当前消息节点下的所有直接子节点(文本和表情都包含在内)
  child_nodes <- html_children(msg_node)
  
  # 逐个处理每个子节点
  processed_parts <- lapply(child_nodes, function(node) {
    if (html_name(node) == "img") {
      # 提取表情的标识文本
      html_attr(node, "shared-tooltip-text")
    } else {
      # 提取文本并清理前后空格,空文本则跳过
      clean_text <- trimws(html_text(node))
      if (clean_text != "") clean_text else NULL
    }
  })
  
  # 把所有有效内容按顺序拼接成字符串
  paste(unlist(processed_parts), collapse = " ")
}

# 批量处理所有消息
final_messages <- sapply(messages, process_single_message)

代码说明

  • html_children(msg_node):获取单条消息节点下的所有子节点,包括文本片段和表情img标签,完全保留原始顺序。
  • 节点判断:通过html_name(node)区分是文本节点还是表情节点,分别处理。
  • trimws():清理文本片段前后的多余空格,避免出现空内容占位的情况。
  • 最后用paste(..., collapse = " ")把所有内容按顺序拼接成符合要求的字符串。

运行这段代码后,你就能得到和原始消息顺序一致的内容,比如示例中的结果会是:text pt1 :yellow_heart: text pt2 :blue_heart:

内容的提问来源于stack exchange,提问作者X. C.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 12:30:42