使用rvest读取多个HTML链接爬取IMDB演职人员信息问题求助
解决方案
你代码中使用的read_htmls()并不是rvest包的官方内置函数,read_html()本身仅支持单个链接读取,要批量读取你已经生成的castlink链接列表,可使用以下两种方法实现:
方法1:基础R lapply 实现(无需额外安装包)
通过迭代函数对每一个链接单独调用read_html(),同时添加请求延迟避免被反爬封禁:
# 批量读取所有演职员表页面 cast_pages <- lapply(castlink, function(url) { # 每次请求间隔1秒,可根据情况调整时长 Sys.sleep(1) read_html(url) })
读取完成后cast_pages为列表格式,每个元素对应一部电影的演职员表HTML对象,可通过迭代提取需要的演职人员信息,示例如下:
# 示例:提取所有电影的主演姓名列表 cast_all <- lapply(cast_pages, function(page) { page %>% html_nodes(".cast_list tr td:nth-child(2) a") %>% html_text(trim = TRUE) })
方法2:purrr map 实现(适合tidyverse生态用户)
如果你日常使用tidyverse系列工具,可以用purrr包的迭代函数简化代码:
library(purrr) cast_pages <- map(castlink, ~{ Sys.sleep(1) read_html(.x) })
提示:IMDB有严格的反爬策略,短时间发送大量请求会被直接封禁IP,一定要添加合理的请求间隔。
内容的提问来源于stack exchange,提问作者Billy C
相关产品推荐
相关产品推荐

