Ошибка 503 Извлечение нескольких URL из одной и той же сети без ошибки 503 - PullRequest
1 голос
/ 02 апреля 2020

Я очищаю веб-страницу Amazon с более чем 500 асин, это означает, что более 500 URL. Я использую sys.Sleep (6) между каждым асином, чтобы очистить, и sys.Sleep (300), когда R соскребает на асине число 100, но я получаю ошибку 503 каждый раз в одной и той же точке в асине 101.

Я пытался увеличить время сна на каждые 100 очищенных осин, но это не работает. Maybe Может быть, есть какой-нибудь пакет, который может мне помочь, или какая-то инструкция, вставленная в код, чтобы помочь мне?

Мой код такой:

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)
 }
}

Спасибо!

1 Ответ

0 голосов
/ 02 апреля 2020

Похоже, проблема не в коде R, а в том, что Amazon блокирует ваши звонки. Рекомендуется рандомизировать паузы Sys.sleep(2 + rnorm(1)) и закрывать соединения

dades <- read_html(url)
closeAllConnections()

Также вы можете попробовать пакет RSelenium, в котором вы можете замаскировать свои намерения очистки.

Пример: https://tykiww.github.io/2018-04-05-Selenium-Scraping/

...