המדריך האולטימטיבי לגרידת אתרים באמצעות Node.js

אז מה בכלל גירוד ברשת? זה כולל אוטומציה של המשימה העמוקה של איסוף מידע מאתרים.

ישנם הרבה מקרים לשימוש בגרידה באינטרנט: כדאי לאסוף מחירים מאתרי סחר אלקטרוני שונים לאתר השוואת מחירים. או אולי אתה זקוק לזמני טיסה ורישומי מלונות / AirBNB לאתר נסיעות. אולי אתה רוצה לאסוף מיילים ממדריכים שונים עבור הפניות למכירות, או להשתמש בנתונים מהאינטרנט כדי להכשיר מודלים של למידה מכונה / AI. או אולי אפילו תרצה לבנות מנוע חיפוש כמו גוגל!

תחילת העבודה עם גירוד באינטרנט היא קלה וניתן לפרק את התהליך לשני חלקים עיקריים:

  • רכישת הנתונים באמצעות ספריית בקשות HTML או דפדפן ללא ראש,
  • וניתוח הנתונים כדי לקבל את המידע המדויק שאתה רוצה.

מדריך זה יוביל אתכם בתהליך באמצעות מודול הבטחת הבקשה של Node.js, CheerioJS ו- Puppeteer. בעבודה על הדוגמאות במדריך זה תלמד את כל הטיפים והטריקים הדרושים לך כדי להיות מקצוען באיסוף כל הנתונים שאתה זקוק להם באמצעות Node.js!

אנו נאסוף רשימה של כל שמותיהם וימי הולדתם של נשיאי ארה"ב מויקיפדיה וכותרות כל ההודעות בעמוד הראשי של רדיט.

ראשית הדברים הראשונים: נתקין את הספריות בהן נשתמש במדריך זה (ההתקנה של בובות המשחק ייקח זמן מה שכן הוא צריך להוריד גם את Chromium).

הגשת בקשתך הראשונה

לאחר מכן, בואו נפתח קובץ טקסט חדש (תן שם לקובץ potusScraper.js), ונכתוב פונקציה מהירה לקבלת ה- HTML של דף "רשימת הנשיאים" בוויקיפדיה.

תְפוּקָה:

שימוש ב- Chrome DevTools

אחלה, קיבלנו את ה- HTML הגולמי מדף האינטרנט! אבל עכשיו עלינו להבין את כתם הטקסט הענק הזה. לשם כך נצטרך להשתמש ב- DevTools של Chrome כדי לאפשר לנו לחפש בקלות ב- HTML של דף אינטרנט.

השימוש ב- Chrome DevTools הוא קל: פשוט פתח את Google Chrome ולחץ לחיצה ימנית על האלמנט שתרצה לגרד (במקרה זה אני לוחץ לחיצה ימנית על ג'ורג 'וושינגטון, מכיוון שאנחנו רוצים לקבל קישורים לכל דפי הוויקיפדיה של הנשיאים הבודדים) :

כעת פשוט לחץ על בדוק, וכרום יעלה את חלונית DevTools שלו, ומאפשר לך לבדוק בקלות את קוד המקור של הדף.

ניתוח HTML עם Cheerio.js

מדהים, Chrome DevTools מציג לנו כעת את התבנית המדויקת שאנו צריכים לחפש בקוד (תג "גדול" עם היפר-קישור בתוכו). בואו נשתמש ב- Cheerio.js כדי לנתח את ה- HTML שקיבלנו קודם לכן כדי להחזיר רשימת קישורים לדפי הוויקיפדיה הבודדים של נשיאי ארה"ב.

תְפוּקָה:

אנו מוודאים כי מוחזרים בדיוק 45 אלמנטים (מספר נשיאי ארה"ב), כלומר אין תגים מוסתרים "גדולים" נוספים במקומות אחרים בדף. כעת אנו יכולים לעבור ולתפוס רשימה של קישורים לכל 45 דפי הוויקיפדיה הנשיאותיים על ידי השגתם מהקטע "attribs" של כל אלמנט.

תְפוּקָה:

כעת יש לנו רשימה של כל 45 דפי הוויקיפדיה הנשיאותיים. בואו ניצור קובץ חדש (בשם potusParse.js), שיכיל פונקציה לקחת דף ויקיפדיה נשיאותי ולהחזיר את שמו של הנשיא ויום הולדתו. ראשית דבר ראשון, בואו נקבל את ה- HTML הגולמי מדף הוויקיפדיה של ג'ורג 'וושינגטון.

תְפוּקָה:

בואו נשתמש שוב ב- DevTools של Chrome כדי למצוא את התחביר של הקוד שאנחנו רוצים לנתח, כדי שנוכל לחלץ את השם ואת יום ההולדת עם Cheerio.js.

אז אנו רואים שהשם הוא בכיתה שנקראת "ראשית הראש" ויום ההולדת הוא בכיתה שנקראת "bday". בואו נשנה את הקוד שלנו בכדי להשתמש ב- Cheerio.js לחילוץ שני המחלקות הללו.

תְפוּקָה:

מחברים את הכל ביחד

מושלם! עכשיו בואו נעטוף את זה לפונקציה ונייצא אותה ממודול זה.

עכשיו נחזור לקובץ המקורי potusScraper.js ונדרוש את המודול potusParse.js. לאחר מכן נשתמש ברשימת ה- wikiUrls שאספנו קודם.

תְפוּקָה:

עיבוד דפי JavaScript

וואלה! רשימה של שמות וימי הולדת של כל 45 נשיאי ארה"ב. השימוש רק במודול הבטחת הבקשה וב- Cheerio.js אמור לאפשר לך לגרד את הרוב המכריע של האתרים באינטרנט.

אולם לאחרונה, אתרים רבים החלו להשתמש ב- JavaScript כדי ליצור תוכן דינמי באתריהם. זה גורם לבעיה בהבטחת בקשה ובספריות בקשות HTTP דומות אחרות (כגון axios ו- fetch), מכיוון שהם מקבלים את התגובה רק מהבקשה הראשונית, אך הם אינם יכולים לבצע את JavaScript באופן שדפדפן אינטרנט יכול.

לפיכך, כדי לגרד אתרים הדורשים ביצוע JavaScript, אנו זקוקים לפיתרון אחר. בדוגמה הבאה שלנו נקבל את הכותרות עבור כל הפוסטים בעמוד הראשי של Reddit. בואו נראה מה קורה כאשר אנו מנסים להשתמש בהבטחת בקשה כפי שעשינו בדוגמה הקודמת.

תְפוּקָה:

כך נראית הפלט:

הממ ... לא ממש מה שאנחנו רוצים. הסיבה לכך היא שקבלת התוכן בפועל מחייבת אתכם להריץ את JavaScript בדף! עם Puppeterer זו לא בעיה.

Puppeteer הוא מודול חדש מאוד פופולרי שהביא לך צוות Google Chrome המאפשר לך לשלוט בדפדפן ללא ראש. זה מושלם לגירוד תכנותי של דפים הדורשים ביצוע JavaScript. בואו נקבל את ה- HTML מהדף הראשי של Reddit באמצעות Puppeteer במקום הבטחת בקשה.

תְפוּקָה:

נֶחְמָד! הדף מלא בתוכן הנכון!

כעת אנו יכולים להשתמש ב- Chrome DevTools כמו שעשינו בדוגמה הקודמת.

נראה כאילו Reddit מכניסה את הכותרות לתגיות "h2". בואו נשתמש ב- Cheerio.js כדי לחלץ את תגי ה- h2 מהדף.

תְפוּקָה:

משאבים נוספים

ויש את הרשימה! בשלב זה אתה אמור להרגיש בנוח לכתוב את מגרד האינטרנט הראשון שלך כדי לאסוף נתונים מכל אתר. להלן מספר משאבים נוספים שעשויים להועיל לך במהלך המסע שלך לגרד באינטרנט:

  • רשימת שירותי פרוקסי גירוד באינטרנט
  • רשימת כלים לגרידת רשת שימושית
  • רשימת טיפים לגירוד באינטרנט
  • השוואה בין פרוקסי גירוד ברשת
  • תיעוד Cheerio
  • תיעוד בובות