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

使用rvest爬取IMDB单个链接成功,批量爬取返回空字符求助

解决rvest爬取IMDB犯罪片列表全部链接为空的问题

你遇到的问题是因为使用的XPath依赖不稳定的页面层级结构,IMDB的页面结构可能发生了变化,或者你的路径定位错误,导致无法匹配到所有链接节点。下面是可靠的解决方法:

核心思路

放弃依赖绝对层级的XPath,改用基于语义化类名的选择器(CSS或XPath),这类选择器更健壮,不易因页面结构微调失效。

完整可运行代码

library(rvest)

# 目标页面URL
website <- "https://www.imdb.com/search/title/?title_type=feature&genres=crime"

# 读取页面内容
page <- read_html(website)

# 使用CSS选择器定位所有影片链接节点
# 选择器逻辑:匹配每个结果项(.ipc-metadata-list-summary-item)下的标题链接(a.ipc-title-link-wrapper)
link_nodes <- page %>% html_elements(".ipc-metadata-list-summary-item a.ipc-title-link-wrapper")

# 提取相对链接并补全为完整URL
link_urls <- link_nodes %>% 
  html_attr("href") %>% 
  paste0("https://www.imdb.com", .)

# 查看前5个结果验证
head(link_urls)

替代XPath写法

如果你偏好使用XPath,也可以用以下基于类名的表达式,效果相同:

link_nodes <- page %>% html_nodes(xpath = "//div[contains(@class, 'ipc-metadata-list-summary-item')]//a[contains(@class, 'ipc-title-link-wrapper')]")

为什么之前的方法失效

你之前使用的XPath是绝对路径(如/html/body/div[2]/...)或依赖特定ID的层级路径,这类路径对页面结构的变化非常敏感:

  • IMDB可能更新了页面布局,调整了div的层级或ID名称
  • 绝对路径只能匹配单个固定位置的元素,无法批量匹配所有结果项

而基于语义化类名的选择器,直接定位到每个影片结果项和标题链接的标识类,无论页面层级如何微调,只要功能逻辑不变,就能稳定匹配到目标元素。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 21:47:06