r - 错误 503 从同一 Web 抓取多个 url 而没有错误 503
问题描述
我正在用超过 500 个 asins抓取亚马逊网页,这意味着超过 500 个网址。我在每个 asin 之间使用 sys.Sleep(6) 进行刮擦,当 R 在 asin 编号 100 处刮擦时使用 sys.Sleep(300) ,但每次在同一点,在 asin 101 中我都会收到错误 503。
我试图在每刮 100 个 asins 时增加睡眠时间,但它不起作用。¿ 是否有任何软件包可以帮助我或您在代码中放入一些指令来帮助我?
我的代码是这样的:
df<-NULL
r=0
for(i in asin.list$V1) {
print(i)
url<-paste0("https://www.amazon.es/gp/offer-listing/",i,"/ref=dp_olp_new?ie=UTF8&condition=new")
Sys.sleep(6)
r=r+1
dades<-read_html(url)
url<-(url)
asin<-(i)
rating<-dades %>% html_nodes("div span span a i span.a-icon-alt") %>% html_text() %>% trimws()
opinions<-dades %>% html_nodes("span.a-size-small a.a-link-normal") %>% html_text() %>% trimws()
if(length(rating)==0){ rating<-"-"}
if(length(opinions)==0){ opinions<-"-"}
info<-data.frame(asin=asin,rating=rating,opinions=opinions)
df<-rbind(df,info)
if (r %in% seq(100,1000,100) ){
Sys.sleep(300)
}
}
谢谢!
解决方案
看起来问题不在于 R 代码,而在于亚马逊阻止了您的调用。一个好的做法是随机暂停Sys.sleep(2 + rnorm(1))
并关闭连接
dades <- read_html(url)
closeAllConnections()
另外,你可以试试这个RSelenium
包,你可以在其中掩盖你的抓取意图。
推荐阅读
- python - 用于绘图指标图的仪表针
- python - 使用 python 的 Mac 上的 Visual Studio Code 在“cerebro = bt.Cerebro()”行出现错误“语法错误:无效语法”
- python - PyCUDA LogicError:cuModuleLoadDataEx 失败:遇到非法内存访问
- c++ - c++中对象类内的对象映射
- function - Passing too many arguments works sometimes, why?
- r - 我可以在 ggplot2 中使用多个填充模式吗?
- c - 您可以使用#define 宏在 C 中创建文件吗?
- python - 按条件计算分组
- docker - 如果我将我的应用程序部署到 Netlify 等 IaaS,我是否需要 Docker?
- ios - 在框架内禁用暗模式