HTML เป็นแกนหลักของเว็บ ทุกหน้าที่คุณเห็นบนอินเทอร์เน็ตคือ HTML ไม่ว่าจะถูกสร้างขึ้นแบบไดนามิกโดย JavaScript, JSP, PHP, ASP หรือเทคโนโลยีเว็บอื่น ๆ เบราว์เซอร์ของคุณจะแยกวิเคราะห์ HTML และแสดงผลให้คุณ แต่ถ้าคุณต้องการแยกวิเคราะห์เอกสาร HTML ด้วยตัวเองในโปรแกรม Java และค้นหาองค์ประกอบ แท็ก คุณลักษณะบางอย่าง หรือตรวจสอบว่ามีองค์ประกอบเฉพาะอยู่หรือไม่ หากคุณเขียนโปรแกรมใน Java มาหลายปีแล้ว ฉันเชื่อว่าคุณต้องลองแยกวิเคราะห์ XML และใช้ตัวแยกวิเคราะห์เช่น DOM หรือ SAX แต่มีความเป็นไปได้มากที่คุณจะไม่เคยทำงานแยกวิเคราะห์ HTML เลย สิ่งที่น่าขันยิ่งกว่านั้นคือในแอปพลิเคชัน Java มีเพียงไม่กี่ครั้งที่คุณต้องการแยกวิเคราะห์เอกสาร HTML และไม่รวม Servlets หรือเทคโนโลยี Java WEB อื่นๆ ที่แย่กว่านั้นคือแกน JDK ไม่มีไลบรารี HTTP หรือ HTML อย่างน้อยฉันก็ไม่รู้จักมัน นี่คือสาเหตุว่าทำไมเมื่อพูดถึงการแยกวิเคราะห์ไฟล์ HTML โปรแกรมเมอร์ Java จำนวนมากจึงต้องไปที่ Google ก่อนเพื่อดูวิธีแยกแท็ก HTML ใน Java เมื่อฉันต้องการสิ่งนี้ ฉันเชื่อว่าจะมีไลบรารีโอเพ่นซอร์สบางแห่งที่สามารถบรรลุเป้าหมายนี้ได้ แต่ฉันไม่เคยคาดหวังว่าจะมีไลบรารีที่ยอดเยี่ยมและใช้งานได้เต็มรูปแบบเช่น JSoup ไม่เพียงแต่รองรับการอ่านและแยกวิเคราะห์เอกสาร HTML เท่านั้น แต่ยังช่วยให้คุณสามารถแยกองค์ประกอบใดๆ จากไฟล์ HTML รวมถึงคุณลักษณะและคุณสมบัติ CSS ขององค์ประกอบเหล่านั้น และคุณยังสามารถแก้ไของค์ประกอบเหล่านั้นได้อีกด้วย ด้วย JSoup คุณสามารถทำอะไรได้เกือบทุกอย่างด้วยเอกสาร HTML เราจะดูตัวอย่างวิธีการดาวน์โหลดและแยกวิเคราะห์ไฟล์ HTML จากหน้าแรกของ Google หรือ URL ใด ๆ ในภาษา Java
ไลบรารี JSoup คืออะไร
Jsoup เป็นไลบรารี Java โอเพ่นซอร์สที่สามารถใช้เพื่อประมวลผล HTML ในแอปพลิเคชันที่ใช้งานได้จริง มี API ที่สะดวกมากสำหรับการดึงและแก้ไขข้อมูล โดยใช้ประโยชน์จากข้อดีของวิธีสไตล์ DOM, CSS และ jquery อย่างเต็มที่ Jsoup ใช้ข้อกำหนด WAHTWG HTML5 และ DOM ที่แยกวิเคราะห์จาก HTML นั้นเหมือนกับที่แยกวิเคราะห์โดยเบราว์เซอร์สมัยใหม่เช่น Chrome และ Firefox ทุกประการ นี่คือคุณสมบัติที่มีประโยชน์ของไลบรารี Jsoup:
1.Jsoup สามารถรับและแยกวิเคราะห์ HTML จาก URL, ไฟล์หรือสตริง
2.Jsoup สามารถค้นหาและดึงข้อมูลโดยใช้ DOM traversal หรือตัวเลือก CSS
3. คุณสามารถใช้ Jsoup เพื่อแก้ไของค์ประกอบ HTML คุณลักษณะและข้อความ
4.Jsoup ตรวจสอบให้แน่ใจว่าเนื้อหาที่ผู้ใช้ส่งมานั้นสะอาดผ่านรายการที่ปลอดภัยเพื่อป้องกันการโจมตี XSS
5.Jsoup ยังสามารถส่งออก HTML ที่เรียบร้อยได้
Jsoup ได้รับการออกแบบมาเพื่อจัดการกับ HTML ทุกประเภทที่ปรากฏในชีวิตจริง รวมถึง HTML ที่ถูกต้องและถูกต้องตลอดจนคอลเลกชันแท็กที่ไม่สมบูรณ์และไม่ถูกต้อง ความสามารถในการแข่งขันหลักอย่างหนึ่งของ Jsoup คือความแข็งแกร่ง
การใช้ Jsoup สำหรับการแยกวิเคราะห์ HTML ใน Java
ในบทช่วยสอนการแยกวิเคราะห์ Java HTML นี้ เราจะเห็นสามตัวอย่างที่แตกต่างกันของการใช้ Jsoup เพื่อแยกวิเคราะห์และสำรวจ HTML ใน Java ในตัวอย่างแรก เราจะแยกวิเคราะห์สตริง HTML ซึ่งมีเนื้อหาเป็นแท็กที่ประกอบด้วยตัวอักษรสตริงในภาษา Java ในตัวอย่างที่สอง เราจะดาวน์โหลดเอกสาร HTML จากเว็บ และในตัวอย่างที่สาม เราจะโหลดไฟล์ตัวอย่าง HTML login.html เพื่อการแยกวิเคราะห์ ไฟล์นี้คือตัวอย่างของเอกสาร HTML โดยมีแท็กชื่อและแท็ก div อยู่ภายในเนื้อหาซึ่งมีแบบฟอร์ม มีแท็กอินพุตสำหรับรับชื่อผู้ใช้และรหัสผ่าน รวมถึงปุ่มส่งและรีเซ็ตสำหรับขั้นตอนต่อไป เป็น HTML ที่ถูกต้องและถูกต้อง กล่าวคือ แท็กและแอตทริบิวต์ทั้งหมดปิดอย่างถูกต้อง นี่คือไฟล์ HTML ตัวอย่างของเรา:
คัดลอกรหัสรหัสดังต่อไปนี้:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<หัว>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>หน้าเข้าสู่ระบบ</title>
</หัว>
<ร่างกาย>
<div id="เข้าสู่ระบบ">
<แบบฟอร์มการกระทำ = "login.do">
ชื่อผู้ใช้ : <input id="username" type="text" /><br>
รหัสผ่าน : <input id="password" type="password" /><br>
<input id="submit" type="submit" />
<input id="reset" type="reset" />
</แบบฟอร์ม>
</div>
</ร่างกาย>
</html>
การใช้ Jsoup เพื่อแยกวิเคราะห์ HTML นั้นง่ายมาก คุณเพียงแค่ต้องเรียกใช้เมธอดคงที่ของมัน Jsoup.parse() แล้วส่งต่อสตริง HTML ของคุณ Jsoup มีเมธอด parse() ที่โอเวอร์โหลดหลายวิธี ซึ่งสามารถอ่านไฟล์ HTML จากสตริง, ไฟล์, URI, URL และแม้แต่ InputStreams หากไม่ใช่การเข้ารหัส UTF-8 คุณยังสามารถระบุการเข้ารหัสอักขระเพื่อให้สามารถอ่านไฟล์ HTML ได้อย่างถูกต้อง ด้านล่างนี้เป็นรายการวิธีแยกวิเคราะห์ HTML ทั้งหมดในไลบรารี Jsoup วิธีการแยกวิเคราะห์ (สตริง html) แยกวิเคราะห์อินพุต HTML ลงในเอกสารใหม่ ใน Jsoup Document จะสืบทอดมาจาก Element ซึ่งจะสืบทอดมาจาก Node TextNode เดียวกันยังสืบทอดมาจาก Node ตราบใดที่คุณส่งผ่านสตริงที่ไม่ใช่ค่าว่าง คุณจะได้รับการแยกวิเคราะห์ที่ประสบความสำเร็จและมีความหมายอย่างแน่นอน และรับเอกสารที่มีองค์ประกอบส่วนหัวและเนื้อหา เมื่อคุณได้รับเอกสารนี้แล้ว คุณสามารถเรียกใช้วิธีการที่เหมาะสมบน Document และคลาสพาเรนต์ Element และ Node เพื่อรับข้อมูลที่คุณต้องการได้
โปรแกรม Java ที่แยกวิเคราะห์เอกสาร HTML
ด้านล่างนี้เป็นโปรแกรม Java ที่สมบูรณ์ซึ่งแยกวิเคราะห์สตริง HTML, ไฟล์ HTML ที่ดาวน์โหลดจากอินเทอร์เน็ต และไฟล์ HTML ในระบบไฟล์ในเครื่อง คุณสามารถใช้ Eclipse IDE หรือ IDE อื่นๆ หรือแม้แต่คำสั่งเพื่อรันโปรแกรมนี้ได้ ใน Eclipse นั้นง่ายมาก เพียงคัดลอกโค้ดนี้ สร้างโปรเจ็กต์ Java ใหม่ คลิกขวาที่แพ็คเกจ src แล้ววางลงไป Eclipse จะสร้างแพ็กเกจที่ถูกต้องและซอร์สไฟล์ Java ที่มีชื่อเดียวกัน ดังนั้นเวิร์กโหลดจึงน้อยที่สุด หากคุณมีโปรเจ็กต์ตัวอย่าง Java อยู่แล้ว จำเป็นต้องมีขั้นตอนเดียวเท่านั้น โปรแกรม Java ต่อไปนี้แสดงสามตัวอย่างที่แตกต่างกันของการแยกวิเคราะห์และการสำรวจไฟล์ HTML ในตัวอย่างแรก เราจะแยกวิเคราะห์สตริงที่มีเนื้อหา HTML โดยตรง ในตัวอย่างนี้เราจะแยกวิเคราะห์ไฟล์ HTML ที่ดาวน์โหลดจาก URL และในตัวอย่างที่สาม เราโหลดเอกสาร HTML จากระบบไฟล์ในเครื่องและแยกวิเคราะห์ วิธีการแยกวิเคราะห์ใช้ในตัวอย่างที่หนึ่งและตัวอย่างที่สามเพื่อรับอ็อบเจ็กต์ Document ซึ่งคุณสามารถสอบถามเพื่อแยกค่าแท็กหรือค่าแอททริบิวต์ใดๆ ได้ ในตัวอย่างที่สอง เราใช้วิธี Jsoup.connect ซึ่งจะสร้างการเชื่อมต่อ URL ดาวน์โหลด HTML และแยกวิเคราะห์ วิธีนี้จะส่งคืนเอกสารซึ่งสามารถใช้สำหรับการค้นหาครั้งต่อไปและรับค่าของแท็กหรือแอตทริบิวต์
คัดลอกรหัสรหัสดังต่อไปนี้:
นำเข้า java.io.IOException;
นำเข้า org.jsoup.Jsoup;
นำเข้า org.jsoup.nodes.Document;
นำเข้า org.jsoup.nodes.Element;
-
[*] โปรแกรม Java เพื่อแยกวิเคราะห์ / อ่านเอกสาร HTML จากไฟล์โดยใช้ไลบรารี Jsoup
[*] Jsoup เป็นไลบรารีโอเพ่นซอร์สที่ช่วยให้นักพัฒนา Java สามารถแยกวิเคราะห์ HTML
[*] ไฟล์และแยกองค์ประกอบ จัดการข้อมูล เปลี่ยนสไตล์โดยใช้ DOM, CSS และ
[*] วิธีการเหมือน JQuery
-
[*] @ผู้เขียน Javin Paul
-
HTMLParser คลาสสาธารณะ{
โมฆะคงสาธารณะ main (String args []) {
// แยกสตริง HTML โดยใช้ไลบรารี JSoup
สตริง HTMLSTring = "<!DOCTYPE html>"
+ "<html>"
+ "<หัว>"
+ "<title>ตัวอย่าง JSoup</title>"
+ "</หัว>"
+ "<ร่างกาย>"
+ '|[b]สวัสดีชาวโลก[/b]"
-
+ "</ร่างกาย>"
+ "</html>";
เอกสาร html = Jsoup.parse(HTMLSTring);
ชื่อสตริง = html.title();
สตริง h1 = html.body().getElementsByTag("h1").text();
System.out.println("ใส่สตริง HTML ไปที่ JSoup:" + HTMLSTring);
System.out.println("หลังจากแยกวิเคราะห์ หัวข้อ : " + title);
System.out.println("หลังจากแยกวิเคราะห์ หัวข้อ : " + h1);
// JSoup ตัวอย่างที่ 2 - อ่านหน้า HTML จาก URL
เอกสารเอกสาร;
พยายาม {
doc = Jsoup.connect("http://google.com/").get();
หัวเรื่อง = doc.title();
} จับ (IOException จ) {
e.printStackTrace();
-
System.out.println("Jsoup สามารถอ่านหน้า HTML จาก URL, title : " + title);
// JSoup ตัวอย่างที่ 3 - แยกวิเคราะห์ไฟล์ HTML ใน Java
//Document htmlFile = Jsoup.parse("login.html", "ISO-8859-1"); // ผิด
เอกสาร htmlFile = null;
พยายาม {
htmlFile = Jsoup.parse(ไฟล์ใหม่("login.html"), "ISO-8859-1");
} จับ (IOException จ) {
// TODO บล็อก catch ที่สร้างขึ้นอัตโนมัติ
e.printStackTrace();
} // ขวา
title = htmlFile.title();
องค์ประกอบ div = htmlFile.getElementById("เข้าสู่ระบบ");
String cssClass = div.className(); // รับคลาสจากองค์ประกอบ HTML
System.out.println("Jsoup ยังสามารถแยกวิเคราะห์ไฟล์ HTML ได้โดยตรง");
System.out.println("ชื่อ : " + ชื่อ);
System.out.println("คลาสของแท็ก div : " + cssClass);
-
-
เอาท์พุท:
คัดลอกรหัสรหัสดังต่อไปนี้:
ป้อนสตริง HTML ลงใน JSoup :<!DOCTYPE html><html><head><title>ตัวอย่าง JSoup</title></head><body><table><tr><td><h1>HelloWorld</h1> </tr></table></body></html>
หลังจากแยกวิเคราะห์แล้ว หัวข้อ: ตัวอย่าง JSoup
หลังจากแยกวิเคราะห์ หัวข้อ: HelloWorld
Jsoup สามารถอ่านหน้า HTML จาก URL, ชื่อ: Google
Jsoup ยังสามารถแยกวิเคราะห์ไฟล์ HTML ได้โดยตรงชื่อ: หน้าเข้าสู่ระบบ
คลาสของแท็ก div: ง่าย
ข้อดีของ Jsoup ก็คือมันแข็งแกร่งมาก โปรแกรมแยกวิเคราะห์ Jsoup HTML จะแยกวิเคราะห์ HTML ที่คุณระบุให้ชัดเจนที่สุดเท่าที่จะทำได้ ไม่ว่า HTML จะมีรูปแบบที่ถูกต้องหรือไม่ก็ตาม สามารถจัดการข้อผิดพลาด เช่น แท็กที่ไม่ปิด (เช่น Java <p>Scala ถึง <p>JavaScala) แท็กโดยนัย (เช่น |Java เปล่านั้นดีมากที่ห่อด้วย |) และสามารถสร้างเอาต์พุตโครงสร้างเอกสาร (HTML) ได้เสมอ รวมทั้งศีรษะและลำตัวด้วย และจะรวมเฉพาะองค์ประกอบที่ถูกต้องในส่วนหัวเท่านั้น) นี่คือวิธีการแยกวิเคราะห์ HTML ใน Java Jsoup เป็นไลบรารีโอเพ่นซอร์สที่ยอดเยี่ยมและมีประสิทธิภาพ ซึ่งทำให้การอ่านเอกสาร HTML, ส่วนเนื้อหา, สตริง HTML และแยกวิเคราะห์เนื้อหา HTML โดยตรงจากเว็บเป็นเรื่องง่ายมาก ในบทความนี้ เราได้เรียนรู้วิธีรับแท็ก HTML เฉพาะใน Java ดังเช่นในตัวอย่างแรก เราได้แยกค่าของชื่อและแท็ก H1 ออกเป็นข้อความ และในตัวอย่างที่สาม เราเรียนรู้วิธีรับมันผ่านคุณสมบัติ Extract CSS เพื่อ รับค่าคุณสมบัติจากแท็ก HTML นอกจากเมธอด html.body().getElementsByTag("h1").text() สไตล์ jQuery อันทรงพลังแล้ว คุณยังสามารถแยกแท็ก HTML ได้ตามต้องการ และยังมีฟังก์ชันต่างๆ เช่น Document.title() และ Element.className( ) วิธีที่สะดวก คุณสามารถรับชื่อและคลาส CSS ได้อย่างรวดเร็ว ฉันหวังว่าคุณจะสนุกกับ JSoup และเราจะเห็นตัวอย่างเพิ่มเติมของ API นี้เร็วๆ นี้