Rotacja serwerów proxy w httr języka R i parsowanie pobranego HTML
Zmieniaj wiersz proxy przy każdym żądaniu httr i przekazuj pobrane bajty do xml2 i rvest.
Wybór proxy trzymaj w samej operacji pobierania. Gdy httr zwróci stronę, parsuj bajty tej odpowiedzi, zamiast przekazywać URL innemu pobierającemu.
Mając wektor urls i niepusty data frame proxies z kolumnami host i całkowitego port:
pages <- vector("list", length(urls))
stopifnot(nrow(proxies) > 0L)
for (i in seq_along(urls)) {
row <- ((i - 1L) %% nrow(proxies)) + 1L
response <- httr::GET(
urls[[i]],
httr::use_proxy(proxies$host[[row]], proxies$port[[row]]),
httr::timeout(30)
)
httr::stop_for_status(response)
pages[[i]] <- xml2::read_html(httr::content(response, as = "raw"))
}
Dla żądań do stron publicznych dozwolonych przez publiczne pośredniki lista proxy HTTP dostarcza kandydatów do kolumn host i port. Indeks przechodzi od pierwszego wiersza proxy do ostatniego i wraca na początek. Każde wywołanie ma własną konfigurację proxy; proces R może działać dalej.
Otrzymane strony zawierają sparsowane dokumenty HTML. Zastosuj do nich rvest::html_elements i potrzebne funkcje ekstrakcji. Przekazanie URL do read_html uruchomiłoby natomiast nowe pobranie z własną konfiguracją sieciową tej ścieżki.
W przypadku proxy z uwierzytelnianiem przekaż wybrane konto przez argumenty username i password funkcji use_proxy. Inny punkt końcowy nie gwarantuje innego publicznego wyjściowego adresu IP, więc pula powinna odpowiadać rzeczywistemu zachowaniu wyjściowemu usługi.