Ruotare i proxy in httr di R e analizzare l'HTML scaricato
Alterna le righe proxy a ogni richiesta httr e passa i byte scaricati a xml2 e rvest.
Mantieni la scelta del proxy nell'operazione di download. Dopo che httr ha restituito la pagina, analizza i byte di quella risposta invece di passare l'URL a un altro downloader.
Dati un vettore urls e un data frame proxies non vuoto con colonne host e port intero:
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"))
}
Per le richieste a pagine pubbliche consentite tramite intermediari pubblici, la lista di proxy HTTP fornisce candidati per le colonne host e port. L'indice scorre dalla prima riga proxy all'ultima e ricomincia. Ogni chiamata ha la propria configurazione proxy; il processo R può continuare a funzionare.
Le pagine risultanti contengono documenti HTML analizzati. Applica rvest::html_elements e le funzioni di estrazione necessarie a quei documenti. Passare un URL a read_html avvierebbe invece un nuovo recupero con la configurazione di rete propria di quel percorso.
Per i proxy autenticati, passa l'account scelto tramite gli argomenti username e password di use_proxy. Un endpoint diverso non garantisce un IP di uscita pubblico diverso, quindi scegli il pool in base al comportamento di uscita reale del servizio.