Proxy's roteren in httr van R en de gedownloade HTML parseren
Wissel per httr-verzoek van proxyrij en geef de gedownloade bytes door aan xml2 en rvest.
Houd de proxykeuze in de downloadbewerking. Nadat httr de pagina heeft teruggegeven, parse je de bytes van dat antwoord in plaats van de URL aan een andere downloader te geven.
Gegeven een vector urls en een niet-lege data frame proxies met kolommen host en geheel getal 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"))
}
Voor verzoeken naar openbare pagina's die via openbare tussenpersonen zijn toegestaan, levert de HTTP-proxylijst kandidaten voor de kolommen host en port. De index loopt van de eerste proxyrij tot de laatste en begint daarna weer vooraan. Elke aanroep heeft zijn eigen proxyconfiguratie; het R-proces kan blijven draaien.
De resulterende pagina's bevatten geparseerde HTML-documenten. Pas rvest::html_elements en de benodigde extractiefuncties toe op die documenten. Een URL aan read_html geven zou juist een nieuwe ophaling starten met de eigen netwerkconfiguratie van dat pad.
Voor geauthenticeerde proxy's geef je het gekozen account door via de argumenten username en password van use_proxy. Een ander eindpunt garandeert geen ander openbaar uitgangs-IP, dus kies de pool op basis van het werkelijke uitgangsgedrag van de dienst.