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

如何使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 07:09:18