انتخاب پروکسی را در خود عملیات دانلود نگه دارید. پس از اینکه 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 خروجی عمومی متفاوتی را تضمین نمی‌کند، پس استخر را بر اساس رفتار واقعی خروج سرویس انتخاب کنید.

مقالات مرتبط