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になるとは限らないため、プールはサービスの実際の出口挙動に合わせて選びます。