JavaRush /בלוג Java /Random-HE /ניתוח HTML קל עם jsoup
Stanislav
רָמָה
Москва

ניתוח HTML קל עם jsoup

פורסם בקבוצה
אולי מתישהו תצטרכו לקבל מידע מאתר אינטרנט או ממסמך HTML באפליקציה שלכם, ואני אגיד בלי להאריך שהשימוש בספריית jsoup יפשט מאוד את המשימה שלכם. על פי הוויקי , jsoup היא ספריית ג'אווה בקוד פתוח המיועדת לניתוח, חילוץ ומניפולציה של נתונים המאוחסנים במסמכי HTML.

התחלה מהירה

ניתן להוריד את הספרייה כקובץ jar ולהציב אותה בפרויקט, או לחבר אותה באמצעות Maven/Gradle. אשאיר קישור לאתר הרשמי בסוף המאמר: שם תוכלו למצוא את הגרסה העדכנית של הספרייה. בדוגמה נשתמש בחיבור דרך Maven. בואו נוסיף תלות:
<​dependency​>
  <​groupId>org.jsoup</groupId>
  <​artifactId>jsoup</artifactId>
  <​version>1.11.3</version>
</dependency>

נוֹהָג

קודם כל, אתה צריך לקבל מופע של המחלקה Documentמ-org.jsoup.nodes.Document המציין את המקור לניתוח. זה יכול להיות קובץ מקומי או קישור. לדוגמה, במאמר זה נשתמש באתר yandex.ru וננסה להשיג את עדכון החדשות הנוכחי שלהם:
Document doc = Jsoup.connect("https://yandex.ru/")
                .userAgent("Chrome/4.0.249.0 Safari/532.5")
                .referrer("http://www.google.com")
                .get();
User Agentהוא מזהה המועבר לאתר שבו מבקרים. באתרים רבים זהו הקריטריון החשוב ביותר עבור מסנן האנטי ספאם. Referrerמכיל את כתובת האתר של מקור הבקשה. השיטה get()זורקת IOException עם טיפול, כך שנוכל לעטוף הכל בבלוק try/catch, או פשוט לזרוק אותו הלאה עם throws. בשלב זה, קיבלנו את קוד המקור של דף זה. במידת הצורך, ספריית jsoup עצמה יכולה לשחזר אלמנטים פגומים. כעת כל שעלינו לעשות הוא לצמצם את החיפוש לבלוק נפרד. לשיטה select()מבחר גדול של שימושים: היא מאפשרת לחפש אלמנטים לפי תג, תכונות, מחלקה ופרמטרים נוספים. כמעט כל הדפדפנים המודרניים תומכים ביכולת לחפש במהירות את קוד המקור של אלמנט נבחר. בעזרת מניפולציות פשוטות, אנו מוצאים את קוד המקור של האלמנט שאנו צריכים ומקבלים divבלוק עם המחלקה המצוינת, בו נשתמש לדגימה. ניתוח HTML קל באמצעות jsoup - 1בואו נשתמש בכיתה Elementsמ-org.jsoup.select.Elements כדי לבחור את כל האלמנטים מהגוש שנבחר.
Elements listNews = doc.select("div#tabnews_newsc.content-tabs__items.content-tabs__items_active_true");
עכשיו יש לנו משהו כזה: ניתוח HTML קל באמצעות jsoup - 2עכשיו כל מה שאנחנו צריכים לעשות זה להשתמש בלולאה קטנה כדי לחזור על כל האלמנטים:
for (Element element : listNews.select("a"))
            System.out.println(element.text());
השיטה text()מאפשרת לך למחוק את קוד הסימון ומשאירה רק שילוב של טקסט עבור כל הרכיבים הנכנסים. תוצאת הביצוע תהיה כדלקמן: ניתוח HTML קל באמצעות jsoup - 3קל להבחין שמספר השורות שהתקבל בפועל אינו תואם את התצוגה בפועל בדף. כאן טמונים המלכודות. אם תסתכל על קוד המקור של הסימון, תבחין שהחדשות האחרונות משתנות באנימציה במרווח זמן מסוים. חלק מה"אבנים" הללו נפתרות על ידי דגימה נוספת, וכמובן, בדיקות. אולי יתברר שחמשת האלמנטים הראשונים יכילו את המידע שאנחנו צריכים, והאלמנט השישי יכיל רק שורה ריקה עם סקריפט. קורה גם שלבלוקים לא יהיו מזהים, אז אפשר להצביע ישירות באמצעות שיטה get(int index)למספר המיקום של האלמנט המדובר.
System.out.println(listNews.select("a").get(2).text());

סיכום

דוגמה זו מראה רק חלק קטן ממה ש-jsoup מסוגל. יש גם את העובדה שאתרים מתעדכנים לעתים קרובות, ומשנים את המבנה של קוד הסימון, כך שכאשר עובדים עם גרידה, אתה צריך להיות מוכן להסתגל לשינויים. אתה יכול לקבל מידע נוסף ואת הגרסה העדכנית באתר הרשמי jsoup.org ; אתה יכול לקרוא עוד על שיעורים ושיטות בקישור o7planning.org . אשאיר קישור ל- github שלי , בזמן הכתיבה ישנם מספר בוטים של טלגרם שמשתמשים ב-Jsoup כדי לקבל ולהציג מידע.
הערות
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION