如何解决HTTP 429请求过多错误?R爬虫延迟优化需求
解决R爬虫HTTP 429错误:添加延迟的实现方案
HTTP 429错误是网站的请求频率限制,核心解决思路是给请求之间加上合理延迟,模拟人类浏览节奏,同时优化代码冗余请求。
关键修改点
- 移除重复的
read_html(link)调用(原代码重复调用两次,完全冗余) - 在列表页循环末尾添加延迟,避免快速爬取多个列表页
- 在详情页请求环节替换
sapply为循环,逐个请求并添加延迟(sapply会几乎同时发起所有详情页请求,是触发429的重灾区) - 用随机延迟而非固定值,更难被反爬机制识别
修改后的完整代码
CARS <- data.frame() # 生成1-3秒随机等待时间的函数 random_delay <- function() { Sys.sleep(runif(1, min = 1, max = 3)) } for (page_result in seq(from = 1, to = 2)) { link <- paste0("https://www.car.gr/classifieds/cars/?condition=used&modified=15&offer_type=sale&pg=", page_result,"®istration-from=2000&significant_damage=f") # 仅保留一次read_html调用 page <- read_html(link) Title <- page %>% html_nodes(".title") %>% html_text2() Price <- page %>% html_nodes(".price-fmt") %>% html_text2() car_links <- page %>% html_nodes(".row-anchor") %>% html_attr("href") %>% paste0("https://www.car.gr", .) # 替换sapply为循环,逐个处理详情页并加延迟 color <- c() gearing_system <- c() HP <- c() CC <- c() FUEL <- c() KM <- c() DATE <- c() # 修正原代码笔误,替换为对应日期获取函数 CATEGORY <- c() for (link in car_links) { color <- c(color, get_color(link)) gearing_system <- c(gearing_system, get_gearing_sys(link)) HP <- c(HP, get_car_HP(link)) CC <- c(CC, get_car_CC(link)) FUEL <- c(FUEL, get_car_fuel(link)) KM <- c(KM, get_car_km(link)) DATE <- c(DATE, get_car_date(link)) # 请根据实际日期函数名调整 CATEGORY <- c(CATEGORY, get_car_category(link)) # 每个详情页请求后加随机延迟 random_delay() } # 正确合并单页数据到总表(原rbind方式逻辑错误) current_page <- data.frame(Title, Price, color, gearing_system, HP, CC, FUEL, KM, DATE, CATEGORY) CARS <- rbind(CARS, current_page) print(paste("Page", page_result, "of", "2")) # 列表页之间加随机延迟 random_delay() }
额外说明
- 随机延迟的时间范围可根据网站严格程度调整,若仍触发限制,可将max值调至5秒
- 原代码中
DATE <- sapply(car_links,get_car_km)为明显笔误,已修正为对应日期函数,请根据实际函数名调整 - 若自定义函数内部包含请求逻辑,确保延迟加在每次请求之后,避免无间隔批量请求
内容的提问来源于stack exchange,提问作者Spink
相关产品推荐
相关产品推荐

