R의 httr에서 프록시를 돌려 쓰고 내려받은 HTML 파싱하기
httr 요청마다 프록시 행을 바꾸고 내려받은 바이트를 xml2와 rvest로 넘깁니다.
프록시 선택은 다운로드 작업 안에 두십시오. httr이 페이지를 돌려준 뒤에는 URL을 다른 다운로더에 넘기지 말고 그 응답의 바이트를 파싱합니다.
벡터 urls와 host 및 정수 port 열을 가진 비어 있지 않은 data frame proxies가 주어진 경우:
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에 넘기면 해당 경로 자체의 네트워크 설정으로 새 가져오기가 시작됩니다.
인증 프록시의 경우 선택한 계정을 use_proxy의 username과 password 인수로 넘깁니다. 다른 엔드포인트가 다른 공인 출구 IP를 보장하지는 않으므로 서비스의 실제 출구 동작에 맞춰 풀을 고르십시오.