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

使用R语言rvest包爬取Instagram博客无法获取文章正文问题求助

问题原因
  • CSS选择器语法错误:多类名元素选择不能用空格分隔,空格是后代选择符,你的写法实际是查找对应类名下的同名标签,该类标签不存在因此返回空。多类名选择需要用.直接拼接类名,例如同时匹配a、b两个类的元素要写为.a.b。
  • 选择器稳定性差:你使用的_8ig0、_9g5w这类名称是Instagram前端自动生成的哈希类名,会随页面版本更新频繁变动,即使修正语法也可能随时失效。
  • 原有代码存在笔误:抓取作者日期的代码中,管道符被注释符号遮挡,导致html_text()没有生效,拿到的是节点对象而非文本内容。
解决方案

修正后的可运行代码如下,提供两种正文抓取方案可选:

library(tidyverse)
library(rvest)
library(stringr)

# 目标页面链接
url <- 'https://about.instagram.com/blog/announcements/break-down-how-instagram-search-works'
# 单次读取页面,避免重复请求
page <- read_html(url)

# 抓取文章标题
titles <- page %>% 
  html_nodes('h1') %>%
  html_text()

# 抓取作者与发布日期,修正管道符注释问题
author_date <- page %>% 
  html_nodes('._8hlt ._8hlu') %>%
  html_text()
author <- author_date[1]  
date <- author_date[2]

# 正文抓取方案1:修正原选择器语法,适配当前页面类名
text <- page %>%
  html_nodes("._8ig0._8g86 ._9g5w._8iq8._8ipi p") %>%
  html_text()

# 正文抓取方案2:语义化定位,不依赖哈希类名,后续稳定性更高
# text <- page %>%
#   html_elements("article p") %>%
#   html_text()

# 合并所有段落为完整文本
full_article_text <- str_c(text, collapse = "\n\n")

代码说明:

  • 单次读取页面存储为变量,避免重复发起请求,提升抓取效率
  • 方案2通过<article>语义标签定位正文区域,不受前端类名迭代影响,更适合长期使用
  • 最终得到的full_article_text就是合并好的完整正文内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 15:48:01