使用RSelenium在R中爬取Reddit时评论重复捕获问题
解决Reddit评论重复爬取的问题
你的问题出在评论内容的定位XPath上,当前的.//div[3]/div/p没有精准限制在单条shreddit-comment元素范围内,导致每次循环都会匹配到页面上所有评论的p标签,所以31条评论每条都被重复提取31次。
修正方案
使用带data-testid属性的精准XPath定位评论内容容器,确保只获取当前循环的这条评论的文本:
将原代码中这一行:
p_tags <- each_comment$findElements(using = "xpath", value = ".//div[3]/div/p")
替换为:
# 精准定位当前评论的内容容器,获取其中所有p标签 p_tags <- each_comment$findElements(using = "xpath", value = ".//div[@data-testid='comment-content']//p")
如果希望直接获取整条评论的合并文本(无需拆分p标签),可以简化为:
comment_text <- each_comment$findElement(using = "xpath", value = ".//div[@data-testid='comment-content']")$getElementText() print(comment_text)
修正后的完整代码片段
#comments comment_list <- remDr$findElements(using = 'tag name', 'shreddit-comment') for (each_comment in comment_list) { author <- each_comment$getElementAttribute('author') print(paste("Author ---", author)) # 精准获取当前评论的所有文本段落 p_tags <- each_comment$findElements(using = "xpath", value = ".//div[@data-testid='comment-content']//p") for (p_tag in p_tags) { print(p_tag$getElementText()) } }
补充说明
Reddit的DOM结构会偶尔调整,data-testid是官方用于测试的属性,比依赖div索引(如div[3])更稳定,能避免因页面结构微调导致的定位失效。另外,在点击"加载更多评论"后,建议增加Sys.sleep(3)等待评论加载完成,避免因DOM未更新导致的元素缺失问题。
内容的提问来源于stack exchange,提问作者Zoro
相关产品推荐
相关产品推荐

