使用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
相关产品推荐
相关产品推荐

