使用R的rvest/xml2包爬取JS页面:彭博富豪榜遇人机验证求助
解决彭博亿万富豪榜人机验证问题的爬虫方案
模拟真实浏览器请求头
默认的read_html请求会暴露爬虫特征,通过添加真实的User-Agent和请求头,可以绕过基础的机器人检测。需要借助httr包构造请求:install.packages("httr") library(rvest) library(httr) url <- "https://www.bloomberg.com/billionaires/" # 构造包含真实浏览器标识的请求头 headers <- add_headers( "User-Agent" = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36", "Accept-Language" = "zh-CN,zh;q=0.9", "Referer" = "https://www.bloomberg.com/" ) # 发送请求并解析页面 response <- GET(url, headers) page <- read_html(content(response, "text"))使用动态浏览器渲染工具
彭博的人机验证可能依赖JavaScript环境,静态请求无法通过。可以用RSelenium模拟真实浏览器操作:install.packages("RSelenium") library(RSelenium) # 启动Chrome浏览器(需提前安装ChromeDriver并配置环境变量) driver <- rsDriver(browser = "chrome", port = 4444L) remDr <- driver[["client"]] # 访问目标页面 remDr$navigate("https://www.bloomberg.com/billionaires/") # 等待页面加载完成(必要时手动完成人机验证,或添加等待时间) Sys.sleep(10) # 获取页面源码并解析 page_source <- remDr$getPageSource()[[1]] page <- read_html(page_source) # 关闭浏览器 remDr$close() driver$server$stop()注意事项
- 频繁请求可能触发更严格的反爬机制,建议添加随机延迟(
Sys.sleep(runif(1, 2, 5))) - 若仍遇到验证,可尝试使用代理IP轮换,或启用Chrome的无头浏览器模式
- 频繁请求可能触发更严格的反爬机制,建议添加随机延迟(
内容的提问来源于stack exchange,提问作者Pratik Chaudhari
相关产品推荐
相关产品推荐

