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

使用R语言并行处理提升网页数据抓取速度

用foreach+doParallel优化HS Code网页抓取的并行方案

核心改造:单循环转并行循环

你的现有脚本是单线程串行处理,用foreach配合doParallel可以直接在单个R会话里实现多线程并行,不用手动拆分文件、开多个会话,还能自动合并结果,避免数据不匹配问题。

步骤1:安装加载必要包

install.packages(c("foreach", "doParallel", "openxlsx")) # 假设用openxlsx导出Excel
library(foreach)
library(doParallel)
library(openxlsx)

步骤2:初始化并行集群

根据你的CPU核心数设置并行进程数,比如你之前用6个会话,就设6个核心:

# 创建并行集群
cl <- makeCluster(6) # 数值别超过CPU总核心数,避免过载
registerDoParallel(cl)

步骤3:改造循环逻辑

把原来的for循环替换成foreach,核心是让每个循环独立返回单条HS Code的结果,由foreach自动合并成最终数据框:

# 读取HS Codes(替换成你的读取逻辑)
HSCodes <- read.csv("HSCode列表.csv")$HSCode列名

# 并行处理每个HS Code
final_df <- foreach(i = 1:length(HSCodes), 
                    .combine = rbind, 
                    .packages = c("rvest", "RSelenium")) %dopar% { # 加载循环需要的包
  current_hs <- HSCodes[i]
  
  # 替换成你原来的页面导航、数据提取逻辑
  # 示例(如果用RSelenium):
  # driver <- rsDriver(browser="chrome")
  # remDr <- driver[["client"]]
  # remDr$navigate(paste0("https://目标网站?hs=", current_hs))
  # 提取数据...
  
  # 把当前HS Code的结果整理成单行数据框
  extracted_data <- data.frame(
    HSCode = current_hs,
    字段1 = 提取到的内容1,
    字段2 = 提取到的内容2
    # 其他需要的字段
  )
  
  extracted_data
}

# 关闭并行集群,释放资源
stopCluster(cl)

# 导出到Excel
write.xlsx(final_df, "最终结果.xlsx")

额外效率优化:砍掉浏览器开销

你说每个HS Code导航耗时1分钟,大概率是因为用了真实浏览器(比如RSelenium控制Chrome),页面渲染太耗时间。如果目标网站没有复杂JS渲染,直接用rvest+httr请求HTML,速度能提升几十倍:

library(rvest)
library(httr)

# 设置请求头模拟浏览器,避免被反爬
headers <- add_headers(
  "User-Agent" = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
)

# 把循环里的浏览器导航改成直接请求HTML
response <- GET(paste0("https://目标网站查询接口?hs=", current_hs), headers = headers)
page <- read_html(response)
# 用html_nodes/html_text等函数提取数据

关键注意事项

  • 反爬限制:并行请求别太密集,建议在循环里加Sys.sleep(1)(根据网站规则调整),避免IP被封禁
  • 错误处理:加tryCatch避免单个HS Code抓取失败导致整个任务中断:
extracted_data <- tryCatch({
  # 你的抓取、提取逻辑
}, error = function(e) {
  data.frame(HSCode = current_hs, 字段1 = NA, 字段2 = NA, 错误信息 = e$message)
})
  • 浏览器并行问题:如果一定要用RSelenium,每个并行进程需要启动独立的浏览器实例,资源消耗会很大,优先考虑rvest方案

内容的提问来源于stack exchange,提问作者Frodo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 14:05:03