![3 דוגמאות כיצד לנתח קובץ HTML ב-Java באמצעות Jsoup - 1]()
HTML הוא הליבה של ה-WEB, כל דפי האינטרנט שאתה רואה, בין אם הם נוצרים באופן דינמי באמצעות JavaScript, JSP, PHP, ASP או טכנולוגיות אינטרנט אחרות, מבוססים על HTML. למעשה, הדפדפן שלך מנתח את ה-HTML ומציג אותו בצורה שנוחה לך. אבל מה אם אתה צריך לנתח מסמך HTML ולמצוא בו אלמנט, תג, תכונה, או לבדוק אם קיים אלמנט מסוים או לא באמצעות תוכנת Java. אם היית מתכנת ג'אווה מספר שנים, אני בטוח שהיית עושה ניתוח XML באמצעות מנתחים כמו DOM או SAX. אבל, למרבה האירוניה, יש מקרים שבהם אתה צריך לנתח מסמך HTML מאפליקציית Java בסיסית שאינה מכילה Servlets וטכנולוגיות אינטרנט אחרות של Java. יתרה מכך, Core JDK גם אינו מכיל ספריות HTTP או HTML. זו הסיבה שכאשר מדובר בניתוח קובץ HTML, מתכנתי Java רבים שואלים את גוגל כיצד לקבל את הערך של תג HTML ב-Java. כשנתקלתי בזה, הייתי בטוח שהפתרון יהיה ספריית קוד פתוח שתטמיע את הפונקציונליות שאני צריך, אבל לא ידעתי שהיא תהיה נפלאה ועשירה בתכונות כמו Jsoup. זה לא רק מספק תמיכה בקריאה וניתוח של קובצי HTML, תכונות, מחלקות CSS בסגנון JQuery, אלא בו-זמנית, מאפשר לך לשנות אותם. באמצעות Jsoup אתה יכול לעשות כל מה שאתה רוצה עם מסמך HTML. במאמר זה ננתח קובץ HTML ונמצא את השמות והתכונות של התגים. כמו כן, נבחן דוגמאות להורדה וניתוח של HTML מקובץ ומכל כתובת אתר, כגון דף הבית של Google.
מה זה Jsoup
Jsoup היא ספריית Java בקוד פתוח לעבודה עם HTML אמיתי. הוא מספק API נוח מאוד לאחזור ולתפעל נתונים באמצעות הטכניקות הטובות ביותר של DOM, CSS ו-jQuery. Jsoup מיישם את מפרט WHATWG HTML5, ומנתח HTML לאותו DOM כפי שעושים דפדפנים מודרניים כמו Chrome ו-Firefox. להלן כמה מהתכונות השימושיות של ספריית Jsoup:
- Jsoup יכול לגרד ולנתח HTML מכתובת URL, קובץ או מחרוזת.
- Jsoup יכול למצוא ולחלץ נתונים באמצעות חציית DOM או בוררי CSS.
- Jsoup מאפשר לך לתפעל רכיבי HTML, תכונות וטקסט.
- Jsoup מספקת ניקוי רשימה לבנה של מידע שסופק על ידי המשתמש כדי למנוע התקפות XSS.
- Jsoup גם מייצר HTML "מסודר".
Jsoup נועד לעבוד עם סוגי HTML השונים הקיימים בעולם האמיתי, כולל HTML מאומת כהלכה עם קבוצת תגים לא שלמה ולא מאומתת. אחד היתרונות העיקריים של Jsoup הוא האמינות שלו.
ניתוח HTML ב-Java באמצעות Jsoup
במדריך זה, נראה שלוש דוגמאות שונות של ניתוח ומעבר של מסמך HTML ב-Java באמצעות Jsoup. בדוגמה הראשונה, ננתח מחרוזת HTML המכילה תגיות בצורה של מחרוזת Java מילולית. בדוגמה השנייה, נוריד את מסמך ה-HTML שלנו מהאינטרנט, ובדוגמה השלישית, נוריד קובץ HTML לדוגמה משלנו login.html לניתוח. קובץ זה הוא מסמך HTML לדוגמה המורכב מתג "title" ותג "div" בקטע "body" המכיל את טופס ה-HTML. הטופס מכיל שדות להזנת שם משתמש וסיסמה וכן כפתורי איפוס ואישור לפעולות נוספות. זהו HTML "נכון" שיכול לעבור את בדיקת ה"תוקף", כלומר כל התגים והתכונות סגורים כהלכה. כך נראה קובץ ה-HTML שלנו:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Login Page</title>
</head>
<body>
<div id="login" class="simple" >
<form action="login.do">
Username : <input id="username" type="text" /><br>
Password : <input id="password" type="password" /><br>
<input id="submit" type="submit" />
<input id="reset" type="reset" />
</form>
</div>
</body>
</html>
עם Jsoup קל מאוד לנתח HTML, כל מה שאתה צריך לעשות הוא לקרוא לשיטה סטטית
Jsoup.parse()
ולהעביר אליה את מחרוזת ה-HTML שלך. Jsoup מספק מספר שיטות עמוסות מדי
parse()
לקריאת HTML ממחרוזת, קובץ, מ-URI בסיסי, מ-URL ומ-
InputStream
. אתה יכול גם לציין את הקידוד כדי לקרוא נכון את קובץ ה-HTML אם הוא לא בפורמט UTF-8. השיטה
parse(String html)
מנתחת את ה-HTML הנכנס לאובייקט חדש
Document
. ב-Jsoup, מחלקה
Document
יורשת ממחלקה
Element
, מה שמרחיב את המחלקה
Node
. הכיתה גם
Node
יורשת מהכיתה
TextNode
. כל עוד אתה מעביר לשיטה מחרוזת שאינה אפסית, מובטח לך שתהיה לך ניתוח מוצלח ומשמעותי של אובייקט
Document
המכיל (לפחות) את האלמנטים "ראש" ו"גוף". אם יש לך אובייקט
Document
, אתה יכול לקבל את הנתונים הרצויים על ידי קריאה לשיטות המתאימות של הכיתה
Document
והוריה
Element
ו
Node
.
תוכנת Java לניתוח מסמך HTML
הנה התוכנית המלאה שלנו לניתוח מחרוזת HTML, קובץ HTML שהורד מהאינטרנט וקובץ HTML מקומי. כדי להפעיל אותו, אתה יכול להשתמש ב-IDE (Eclipse או כל אחר) או בשורת הפקודה. ב-Eclipse זה מאוד קל, פשוט העתק את הקוד הזה, צור פרוייקט Java חדש, לחץ לחיצה ימנית על התיקיה "src" והדבק את הקוד שהועתק. Eclipse תדאג ליצור את החבילה המתאימה וקובץ קוד המקור עם השם המתאים, כך שזה הרבה פחות עבודה. אם כבר יש לך פרויקט Java, אז זה רק שלב אחד. התוכנית שלהלן ממחישה שלוש דוגמאות של ניתוח ומעבר של קובץ HTML. בדוגמה הראשונה אנו מנתחים ישירות מחרוזת המכילה HTML, בשנייה קובץ HTML שהורד מכתובת URL, בדוגמה השלישית מורידים ומנתחים מסמך HTML ממערכת הקבצים המקומית.
import java.io.File;
import java.io.IOException;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
public class HTMLParser{
public static void main(String args[]) {
String HTMLSTring = "<!DOCTYPE html>"
+ "<html>"
+ "<head>"
+ "<title>JSoup Example</title>"
+ "</head>"
+ "<body>"
+ "<table><tr><td><h1>HelloWorld</h1></tr>"
+ "</table>"
+ "</body>"
+ "</html>";
Document html = Jsoup.parse(HTMLSTring);
String title = html.title();
String h1 = html.body().getElementsByTag("h1").text();
System.out.println("Input HTML String to JSoup :" + HTMLSTring);
System.out.println("After parsing, Title : " + title);
System.out.println("Afte parsing, Heading : " + h1);
Document doc;
try {
doc = Jsoup.connect("http://google.com/").get();
title = doc.title();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("Jsoup Can read HTML page from URL, title : " + title);
Document htmlFile = null;
try {
htmlFile = Jsoup.parse(new File("login.html"), "ISO-8859-1");
} catch (IOException e) {
e.printStackTrace();
}
title = htmlFile.title();
Element div = htmlFile.getElementById("login");
String cssClass = div.className();
System.out.println("Jsoup can also parse HTML file directly");
System.out.println("title : " + title);
System.out.println("class of div tag : " + cssClass);
}
}
תְפוּקָה:
Input HTML String to JSoup :<!DOCTYPE html><html><head><title>JSoup Example</title></head><body><table><tr><td><h1>HelloWorld</h1></tr></table></body></html>
After parsing, Title : JSoup Example
Afte parsing, Heading : HelloWorld
Jsoup Can read HTML page from URL, title : Google
Jsoup can also parse HTML file directly
title : Login Page
class of div tag : simple
מנתח ה-HTML של Jsoup יעשה כל מאמץ לייצר ניתוח "נקי" של ה-HTML שאתה מספק, בין אם הוא מעוצב היטב ובין אם לא. זה יכול להתמודד עם השגיאות הבאות:
- תגים לא סגורים. לדוגמה,
<p>Java <p>Scala to <p>Java</p> <p>Scala</p>
- תגים מרומזים. לדוגמה, פתוחים
<td>Java is Great</td>
יהיו עטופים<table><tr><td>
- Jsoup יוצר מבני מסמכים חזקים (HTML מכיל ראש וגוף, אבל הגוף מכיל רק אלמנטים רלוונטיים)
Jsoup היא ספריית קוד פתוח מעולה ואמינה שהופכת את קריאת מסמכי HTML, קטעי גוף, מחרוזות HTML וניתוח ישיר של תוכן אינטרנט של HTML לפשוטה מאוד.
GO TO FULL VERSION