גירוד אינטרנט, הידוע גם כחילוץ נתוני אינטרנט, היא שיטה אוטומטית לחילוץ נתונים או תוכן מדפי אינטרנט.
מגרדי אינטרנט הופכים את חילוץ הנתונים לאוטומטיים ללא הפרעה אנושית. מגרד ניגש לדף אינטרנט על ידי שליחת בקשות HTTP, בדומה לדפדפן אינטרנט. עם זאת, במקום להציג את ה-HTML שהוא מביא, הוא מעבד אותו לפי ההוראות שלך ומאחסן את התוצאה.
מגרדי אינטרנט שימושיים עבור שליפת נתונים מאתרים שאינם מספקים ממשקי API. הם פופולריים בתחומים כמו מדעי נתונים, אבטחת סייבר, חזית ופיתוח עורפי.
גירוד אינטרנט ב-Go
ב-Go, ישנן חבילות שונות של גירוד אינטרנט. הפופולריים שבהם כוללים goquery, Colly ו-ChromeDP.
ChromeDP היא חבילת מנהלי התקן אינטרנט דמוית סלניום. הוא תומך בפרוטוקול כלי המפתחים של Chrome ב-Go ללא תלות.
Colly היא ספרייה ספציפית לגרידת רשת שנבנתה באמצעות goquery. אבל goquery היא האפשרות המהירה יותר לגירוד אתרים ב-Go.
מה זה goquery?
ספריית ה-CSS, jQuery, עזרה לעורר השראה goquery. זוהי ספריית Go המבוססת על net/html חבילה, המיישמת טוקנייזר ומנתח תואמי HTML5. הוא משתמש גם בחבילת Cascadia, המיישמת בוררי CSS לשימוש עם המנתח המסופק על ידי net/html.
התקנת goquery
הפעל את הפקודה למטה בטרמינל שלך כדי להתקין goquery. אם אתה נתקל בשגיאות כלשהן, נסה לעדכן את גרסת ה-Go שלך.
ללכת קבל github.com/PuerkitoBio/goquery
תהליך גירוד האינטרנט
אתה יכול לחלק את תהליך הגרידה הכולל לשלוש משימות קטנות יותר:
- ביצוע בקשות HTTP.
- שימוש בבוררים ובאיתור כדי לקבל את הנתונים הנדרשים.
- שמירת נתונים במסד נתונים או במבני נתונים להמשך עיבוד.
ביצוע בקשות HTTP ב-Go
אתה יכול לשלוח בקשות HTTP באמצעות net/http חבילה, שספריית התקן Go כוללת.
חֲבִילָה רָאשִׁי
יְבוּא "נטו/http"
יְבוּא "עֵץ"
יְבוּא "fmt"funcרָאשִׁי() {
webUrl := "https://news.ycombinator.com/"
תגובה, err:= http. קבל (webURl)
אם טעות != אֶפֶס {
עֵץ. פתאלן (שגיאה)
} אַחֵראם תְגוּבָה. StatusCode == 200 {
fmt. Println("אנחנו יכולים לגרד את זה")
} אַחֵר {
עֵץ. Fatalln("אל תגרד את זה")
}
}
http. לקבל מחזיר גוף תגובה ושגיאה. תְגוּבָה. קוד סטטוס הוא קוד סטטוס בקשה-תגובה.
בביצוע בקשות HTTP, אם ה קוד סטטוס תגובה הוא 200 אתה יכול להמשיך לגרד את האתר.
השגת הנתונים הדרושים באמצעות goquery
קבלת HTML של האתר
ראשית, עליך לנתח את ה-HTML הפשוט מהתגובה (תגובה.גוף) כדי לקבל אובייקט מסמך שלם המייצג את דף האינטרנט:
מסמך, טעות := goquery. NewDocumentFromReader (תגובה. גוּף)
אם טעות != אֶפֶס {
עֵץ. פתאלן (שגיאה)
}
כעת תוכל להשתמש באובייקט המסמך כדי לגשת למבנה ולתוכן שדף האינטרנט מכיל.
בחירת רכיבים נדרשים מתוך ה-HTML
תצטרך לבדוק את דף האינטרנט כדי לבדוק את מבנה הנתונים שאתה צריך לחלץ. זה יעזור לך לבנות בורר כדי לגשת אליו.
באמצעות בוררים ומאתרים, אתה יכול לחלץ את ה-HTML שאתה צריך באמצעות למצוא שיטה של אובייקט המסמך.
ה למצוא השיטה לוקחת בורר CSS כדי לאתר את האלמנט שמכיל את הנתונים שאתה צריך:
מסמך. Find("tr.athing")
הקוד שלמעלה מחזיר רק את רכיב ה-HTML הראשון התואם לבורר, או רשימה ריקה אם לא הייתה התאמה כלל.
בחירת רכיבים מרובים מתוך HTML
רוב הזמן, תרצה להביא את כל רכיבי ה-HTML התואמים את הבורר שלך.
אתה יכול לבחור את כל הרכיבים התואמים ב-HTML באמצעות ה- כל אחד שיטת הערך כי למצוא() החזרות. ה כל אחד השיטה לוקחת פונקציה עם שני פרמטרים: אינדקס ובורר מסוג *goquery. בְּחִירָה.
מסמך. Find("tr.athing").Each(func(אינדקס int, בורר *goquery. בְּחִירָה) {
/* בורר תהליכים כאן */
})
בגוף הפונקציה, אתה יכול לבחור את הנתונים הספציפיים שאתה רוצה מה-HTML. במקרה זה, אתה צריך את הקישורים והכותרות של כל פוסט שהדף מפרט. להשתמש ב למצוא שיטה של פרמטר הבורר כדי לצמצם את קבוצת האלמנטים ולחלץ ערכי טקסט או תכונות.
מסמך. Find("tr.athing").Each(func(אינדקס int, בורר *goquery. בְּחִירָה) {
כותרת := בורר. Find("td.title").Text()
קישור, נמצא := בורר. Find("a.titlelink").Attr("href")
})
הקוד למעלה קורא ל- טֶקסט שיטת התוצאה מ בוחר. למצוא כדי לחלץ את התוכן של תא טבלה. בחירת תכונות - כמו כתובות אתרים של קישורים ותמונה - מחייבת אותך להשתמש ב Attr שיטה. שיטה זו גם מחזירה ערך המציין אם התכונה קיימת בכלל.
התהליך זהה לבחירת כל הרכיבים והתכונות מחוץ לדף אינטרנט.
ה למצוא השיטה חזקה מאוד, המאפשרת מגוון רחב של פעולות לבחירה ולאתר רכיבי HTML. אתה יכול לחקור את אלה בתיעוד Goquery.
שמירת הנתונים המגורדים
תכונת הקישור והכותרת הן מחרוזות שניתן להקצות למשתנים. בתרחישים אמיתיים, אתה תשמור במסד נתונים או במבנה נתונים לצורך מניפולציה. לעתים קרובות, מבנה מותאם אישית פשוט יספיק.
צור מבנה עם שדות כותרת וקישור ופרוסת מבנים שיחזיקו את סוג המבנה.
סוּג מֵידָע מבנה {
קישור חוּט
כותרת חוּט
}
מידע := עשה([]מֵידָע, 0)
לאחר שיצרת את המבנה והפרוסה, בגוף הפונקציה של שיטת המסמך, אכלס את הפרוסה בפונקציה שתעביר לשיטת Find. השתמש בסוג struct כדי ליצור מבני נתונים חדשים, שכל אחד מכיל תוצאה אחת.
מידע = לְצַרֵף(מידע, מידע{
כותרת: כותרת,
קישור: קישור,
})
זה מוסיף סוגים של מֵידָע(המבנה) ל- מידע(הנתח) שממנו אתה יכול לתפעל את הנתונים כרצונך.
הדפסת הפרוסה מראה שגירדת את האתר בהצלחה ואיכלת את הפרוסה.
fmt. Println (מידע)
סביר לשמור את הנתונים המגורדים במטמון מקומי כדי שלא תפגע בשרת של דף האינטרנט יותר ממה שאתה צריך. זה לא רק יקטין את התעבורה אלא יזרז את האפליקציה שלך מכיוון שהיא מהירה יותר לאחזר נתונים מקומיים מאשר לשלוח בקשות ולגרד אתרים.
ישנן חבילות מסד נתונים רבות ב-Go שבהן תוכל להשתמש כדי לשמור את הנתונים. ה מסד נתונים/sql החבילה תומכת במסדי נתונים של SQL. ישנם גם לקוחות מסד נתונים NoSQL כמו מנהל ההתקן של MongoDB Go, ומסדי נתונים ללא שרת כמו FaunaDB באמצעות ה מנהל התקן FaunaDB.
המהות של גירוד אינטרנט ב-Go
אם אתה מנסה לגרד נתונים מאתר, goquery הוא מקום מצוין להתחיל בו. אבל זו חבילה חזקה שיכולה לעשות יותר מסתם גירוד אינטרנט. אתה יכול לגלות על עוד מהפונקציונליות שלו בתיעוד הרשמי של הפרויקט.
גירוד אינטרנט הוא מיומנות חשובה בתחומי טכנולוגיה שונים והיא תהיה שימושית במהלך רבים מהפרויקטים שלך.
כיצד ליישם מושגי תכנות מונחה עצמים ב-Go
קרא הבא
נושאים קשורים
- תִכנוּת
- בניית אתרים
- תִכנוּת
על הסופר
גודנס הוא כותב טכני, מפתח אחורי ומנתח נתונים, המפשט נושאים טכנולוגיים שונים כשהוא חוקר את התחום המרתק הזה.
הירשם לניוזלטר שלנו
הצטרף לניוזלטר שלנו לקבלת טיפים טכניים, ביקורות, ספרים אלקטרוניים בחינם ומבצעים בלעדיים!
לחץ כאן כדי להירשם