R网络爬取新手求助:如何用rvest定位IMDB电影标题的HTML节点
爬取IMDB Top250前50电影标题的R语言实现
首先修正你代码里的一个小问题:你目标是按评分降序抓取Top250,但代码里写的是sort=user_rating,asc(升序),得改成desc才符合需求。
怎么找正确的HTML节点?
打开目标网页,右键点击任意电影标题,选择「检查」(Chrome/Edge浏览器),就能看到对应的HTML结构。你会发现每个电影标题都嵌套在<h3 class="lister-item-header">标签下的<a>标签里,所以对应的节点选择器是.lister-item-header a。
完整可运行代码
library(rvest) library(dplyr) # 修正后的目标链接(按评分降序排序) website <- "https://www.imdb.com/search/title/?sort=user_rating,desc&groups=top_250" page <- read_html(website) # 提取电影标题,使用正确的节点选择器 movie_titles <- page %>% html_nodes(".lister-item-header a") %>% html_text() # 取前50条(该页面默认返回50条结果) top50_titles <- head(movie_titles, 50) print(top50_titles)
额外扩展:提取更多电影信息
如果想顺便抓取评分、上映年份,可以用这些选择器:
- 评分:
.ratings-imdb-rating strong - 年份:
.lister-item-year
示例代码:
# 提取评分 movie_ratings <- page %>% html_nodes(".ratings-imdb-rating strong") %>% html_text() %>% as.numeric() # 提取年份(提取纯数字部分) movie_years <- page %>% html_nodes(".lister-item-year") %>% html_text() %>% stringr::str_extract("\\d{4}") %>% as.integer() # 合并成结构化数据框 top50_movies <- data.frame( 排名 = 1:50, 标题 = top50_titles, 评分 = movie_ratings[1:50], 年份 = movie_years[1:50] ) print(top50_movies)
内容的提问来源于stack exchange,提问作者androsrj
相关产品推荐
相关产品推荐

