Ротация прокси в httr на R и разбор загруженного HTML
Меняйте строку прокси при каждом запросе httr и передавайте загруженные байты в xml2 и rvest.
Держите выбор прокси в самой операции загрузки. После того как httr вернул страницу, разбирайте байты этого ответа, а не передавайте URL другому загрузчику.
Пусть заданы вектор urls и непустой data frame proxies со столбцами host и целочисленного 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"))
}
Для запросов к публичным страницам, разрешённым через публичных посредников, список HTTP-прокси поставляет кандидатов для столбцов host и port. Индекс проходит от первой строки прокси до последней и возвращается к началу. У каждого вызова своя конфигурация прокси; процесс R может продолжать работу.
Полученные страницы содержат разобранные документы HTML. Применяйте к ним rvest::html_elements и нужные функции извлечения. Передача URL в read_html вместо этого запустила бы новую загрузку с собственной сетевой конфигурацией этого пути.
Для прокси с аутентификацией передавайте выбранную учётную запись через аргументы username и password функции use_proxy. Другая конечная точка не гарантирует другой публичный выходной IP, поэтому пул выбирайте по реальному поведению сервиса на выходе.