Mantenha a escolha do proxy na própria operação de download. Depois que o httr retornar a página, analise os bytes dessa resposta em vez de passar a URL a outro baixador.

Dado um vetor urls e um data frame proxies não vazio com colunas host e port inteiro:

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

Para requisições a páginas públicas permitidas por intermediários públicos, a lista de proxies HTTP fornece candidatos para as colunas host e port. O índice percorre da primeira linha de proxy até a última e recomeça. Cada chamada tem sua própria configuração de proxy; o processo R pode continuar rodando.

As páginas resultantes contêm documentos HTML analisados. Aplique rvest::html_elements e as funções de extração necessárias a esses documentos. Passar uma URL ao read_html iniciaria uma nova busca com a configuração de rede própria daquele caminho.

Para proxies autenticados, passe a conta escolhida pelos argumentos username e password de use_proxy. Um endpoint diferente não garante um IP de saída público diferente, então escolha o pool conforme o comportamento real de saída do serviço.

Artigos relacionados