כאשר ממשק API פשוט לא חותך אותו, אתה תמיד יכול לפנות לגרד HTML, ו-Rust יכול לעזור לך.
גרידה באינטרנט היא טכניקה פופולרית לאיסוף כמויות גדולות של נתונים מדפי אינטרנט במהירות וביעילות. בהיעדר ממשק API, גירוד אינטרנט יכול להיות הגישה הטובה ביותר.
המהירות ובטיחות הזיכרון של חלודה הופכים את השפה לאידיאלית לבניית מגרדי אינטרנט. Rust היא ביתם של ספריות רבות לניתוח וחילוץ נתונים רב עוצמה, ויכולות הטיפול החזקות שלה הן שימושיות לאיסוף נתוני אינטרנט יעיל ואמין.
גירוד רשת בחלודה
ספריות פופולריות רבות תומכות בגרידת רשת ב- Rust, כולל reqwest, מַגרֵד, בחר, ו html5ever. רוב מפתחי Rust משלבים פונקציונליות מ-reqwest ו- scraper עבור גירוד האינטרנט שלהם.
ספריית reqwest מספקת פונקציונליות לביצוע בקשות HTTP לשרתי אינטרנט. Reqwest בנויה על המובנה של Rust יֶתֶר ארגז תוך אספקת API ברמה גבוהה עבור תכונות HTTP סטנדרטיות.
Scraper היא ספריית גירוד אינטרנט רבת עוצמה המנתחת מסמכי HTML ו-XML ו מחלץ נתונים באמצעות בוררי CSS וביטויי XPath.
לאחר יצירת פרויקט Rust חדש עם ה מטען חדש פקודה, הוסף את reqwest ו מַגרֵד ארגזים לקטע התלות שלך cargo.toml קוֹבֶץ:
[תלות]
reqwest = {גרסה = "0.11", תכונות = ["חוסם"]}
מַגרֵד = "0.12.0"
אתה תשתמש reqwest ל לשלוח בקשות HTTP ו מַגרֵד לניתוח.
אחזור דפי אינטרנט עם Reqwest
תשלח בקשה לתוכן של דף אינטרנט לפני שתנתח אותו כדי לאחזר נתונים ספציפיים.
אתה יכול לשלוח בקשת GET ולאחזר את מקור ה-HTML של דף באמצעות טֶקסט פונקציה על לקבל פונקציה של reqwest סִפְרִיָה:
fnretrieve_html() -> חוּט {
לתת תגובה = לקבל(" https://news.ycombinator.com").unwrap().text().unwrap();
לַחֲזוֹר תְגוּבָה;
}
ה לקבל הפונקציה שולחת את הבקשה לדף האינטרנט, וה- טֶקסט הפונקציה מחזירה את הטקסט של ה-HTML.
ניתוח HTML עם Scraper
ה retrieve_html הפונקציה מחזירה את הטקסט של ה-HTML, ותצטרך לנתח את טקסט ה-HTML כדי לאחזר את הנתונים הספציפיים שאתה צריך.
Scraper מספק פונקציונליות לאינטראקציה עם HTML ב- HTML ו בוחר מודולים. ה HTML מודול מספק פונקציונליות לניתוח המסמך, וה- בוחר מודול מספק פונקציונליות לבחירת אלמנטים ספציפיים מה-HTML.
כך תוכל לאחזר את כל הכותרות בדף:
להשתמש scraper::{Html, Selector};
fnרָאשִׁי() {
לתת תגובה = reqwest:: blocking:: get(
" https://news.ycombinator.com/").unwrap().text().unwrap();// נתח את מסמך ה-HTML
לתת doc_body = HTML:: parse_document(&response);
// בחר את האלמנטים עם מחלקת שורת הכותרת
לתת title = Selector:: parse(".titleline").לְגוֹלֵל();
ל כותרת ב doc_body.select(&title) {
לתת titles = title.text().collect::<Vec<_>>();
println!("{}", כותרות[0])
}
}
ה parse_document פונקציה של HTML מודול מנתח את טקסט ה-HTML, ואת לְנַתֵחַ פונקציה של בוחר מודול בוחר את האלמנטים עם בורר ה-CSS שצוין (במקרה זה, ה שורת הכותרת מעמד).
ה ל לולאה חוצה דרך אלמנטים אלה ומדפיסה את גוש הטקסט הראשון מכל אחד מהם.
להלן התוצאה של הפעולה:
בחירת תכונות עם מגרד
כדי לבחור ערך תכונה, אחזר את האלמנטים הנדרשים כמו קודם והשתמש ב- attr שיטה של מופע ערך התג:
להשתמש reqwest:: blocking:: get;
להשתמש scraper::{Html, Selector};fnרָאשִׁי() {
לתת תגובה = לקבל(" https://news.ycombinator.com").unwrap().text().unwrap();
לתת html_doc = HTML:: parse_document(&response);
לתת class_selector = Selector:: parse(".titleline").לְגוֹלֵל();ל אֵלֵמֶנט ב html_doc.select(&class_selector) {
לתת link_selector = Selector:: parse("א").לְגוֹלֵל();
ל קישור ב element.select(&link_selector) {
אםלתתכמה(href) = link.value().attr("הרף") {
println!("{}", href);
}
}
}
}
לאחר בחירת אלמנטים עם ה שורת הכותרת כיתה באמצעות לְנַתֵחַ פונקציה, ה ל לולאה חוצה אותם. בתוך הלולאה, הקוד נשאב א מתייג ובוחר את href תכונה עם ה attr פוּנקצִיָה.
ה רָאשִׁי הפונקציה מדפיסה קישורים אלה, עם תוצאה כמו זו:
אתה יכול לבנות יישומי אינטרנט מתוחכמים בחלודה
לאחרונה, Rust זוכה לאימוץ כשפה לפיתוח אתרים מהחזית ועד לפיתוח אפליקציות בצד השרת.
אתה יכול למנף את הרכבת האינטרנט כדי לבנות יישומי אינטרנט מלאים עם ספריות כמו Yew ופרסי או לבנות בצד השרת יישומים עם Actix, Rocket ושלל הספריות במערכת האקולוגית Rust המספקות פונקציונליות לבניית אינטרנט יישומים.