Ротація проксі в 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, тому пул вибирайте за реальною вихідною поведінкою сервісу.