如何使用R语言从多个链接中批量爬取同类型网页数据
R语言批量爬取DataFrame中多链接同类型数据落地方案
基于你已验证可用的单链接爬取逻辑,批量爬取的核心思路是将单链接爬取逻辑封装为带容错、带反爬规避的自定义函数,再通过迭代函数逐行应用到存储链接的列上,具体实现步骤如下:
1. 加载依赖包
首先加载爬取、数据处理、迭代请求需要用到的R包:
library(rvest) library(dplyr) library(purrr) library(httr)
2. 封装带容错机制的单页爬取函数
在你原有单页爬取逻辑的基础上,增加请求延迟、浏览器UA模拟、错误捕获逻辑,避免单个链接爬取失败导致整个批量任务中断,同时降低被反爬拦截的概率:
scrape_airbnb_info <- function(target_url, req_delay = 2) { # 增加随机请求间隔,避免请求频率过高触发反爬 Sys.sleep(req_delay + runif(1, min = 0, max = 1.5)) # 错误捕获,单链接失败不中断整体任务 res <- tryCatch({ # 模拟真实浏览器请求头 page_resp <- GET( target_url, user_agent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36") ) page <- read_html(page_resp) # 复用你已验证有效的节点提取逻辑 extract_res <- page %>% html_nodes("._a0kct9 ._14i3z6h") %>% html_text() # 处理空结果,统一返回格式 if (length(extract_res) == 0) { NA_character_ } else { paste(extract_res, collapse = " | ") } }, error = function(err_msg) { message(paste0("链接爬取异常:", target_url, ",错误原因:", err_msg$message)) NA_character_ }) return(res) }
3. 批量运行爬取任务
假设你的DataFrame对象名为airbnb_df,存储网页链接的列名为page_url,直接调用迭代函数将爬取结果存入新列即可:
# 批量爬取,结果存入新列user_info airbnb_df <- airbnb_df %>% mutate( user_info = map_chr( .x = page_url, # 替换为你自己DataFrame中存储链接的实际列名 .f = ~scrape_airbnb_info(.x, req_delay = 2) ) )
运行完成后,所有链接提取到的内容会对应存入user_info列,爬取失败的链接会自动填充为NA,方便后续补爬。
落地注意事项
- 不要随意调小请求间隔,高频请求极易被Airbnb反爬系统识别拦截,建议请求间隔不低于2秒
- 如果待爬取链接数量超过50条,建议增加分批落盘逻辑,每爬完20-30条就将当前结果保存到本地文件,避免断网、程序崩溃导致已爬数据丢失
- 如果批量运行时出现大量NA结果,先单独取1条链接运行单页爬取代码,确认CSS选择器是否失效——Airbnb的前端类名是动态生成的,页面版本更新后类名可能变化,重新抓取替换选择器即可
- 如果爬取时遇到登录墙拦截,需要先在浏览器完成登录,将有效cookie配置到GET请求中,否则无法获取完整页面内容
内容的提问来源于stack exchange,提问作者shubham tiwari
相关产品推荐
相关产品推荐

