סבב פרוקסי ב-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 יציאה ציבורית אחרת, לכן בחרו את המאגר לפי התנהגות היציאה בפועל של השירות.