![3 ตัวอย่างวิธีแยกวิเคราะห์ไฟล์ HTML ใน Java โดยใช้ Jsoup - 1]()
HTML เป็นแกนหลักของเว็บ หน้าอินเทอร์เน็ตทั้งหมดที่คุณเห็น ไม่ว่าจะสร้างแบบไดนามิกโดยใช้ JavaScript, JSP, PHP, ASP หรือเทคโนโลยีเว็บอื่น ๆ ก็ตามจะขึ้นอยู่กับ HTML ที่จริงแล้ว เบราว์เซอร์ของคุณจะแยกวิเคราะห์ HTML และแสดงในลักษณะที่สะดวกสำหรับคุณ แต่ถ้าคุณต้องการแยกวิเคราะห์เอกสาร HTML และค้นหาองค์ประกอบ แท็ก คุณลักษณะในนั้น หรือตรวจสอบว่ามีองค์ประกอบเฉพาะอยู่หรือไม่โดยใช้โปรแกรม Java หากคุณเป็นโปรแกรมเมอร์ Java มาหลายปีแล้ว ฉันแน่ใจว่าคุณคงจะทำการแยกวิเคราะห์ XML โดยใช้ parsers เช่น DOM หรือ SAX แต่น่าแปลกที่บางครั้งคุณจำเป็นต้องแยกวิเคราะห์เอกสาร HTML จากแอปพลิเคชัน Java พื้นฐานที่ไม่มี Servlets และเทคโนโลยีเว็บ Java อื่นๆ นอกจากนี้ Core JDK ยังไม่มีไลบรารี HTTP หรือ HTML นั่นเป็นสาเหตุว่าทำไมเมื่อพูดถึงการแยกวิเคราะห์ไฟล์ HTML โปรแกรมเมอร์ Java จำนวนมากจึงถาม Google ว่าจะรับค่าของแท็ก HTML ใน Java ได้อย่างไร เมื่อฉันเจอสิ่งนี้ ฉันแน่ใจว่าโซลูชันนี้จะเป็นไลบรารีโอเพ่นซอร์สที่ใช้ฟังก์ชันที่ฉันต้องการ แต่ฉันไม่รู้ว่ามันจะยอดเยี่ยมและเต็มไปด้วยฟีเจอร์มากมายเช่น Jsoup ไม่เพียงให้การสนับสนุนการอ่านและแยกวิเคราะห์ไฟล์ HTML, คุณลักษณะ, คลาส CSS ในรูปแบบ JQuery เท่านั้น แต่ในขณะเดียวกันก็ให้คุณแก้ไขไฟล์เหล่านั้นได้ การใช้ Jsoup คุณสามารถทำอะไรก็ได้ที่คุณต้องการด้วยเอกสาร HTML ในบทความนี้ เราจะแยกวิเคราะห์ไฟล์ HTML และค้นหาชื่อและคุณสมบัติของแท็ก นอกจากนี้ เราจะดูตัวอย่างการดาวน์โหลดและแยกวิเคราะห์ HTML จากไฟล์และ URL ใดๆ เช่น หน้าแรกของ Google
เจซุปคืออะไร
Jsoup เป็นไลบรารี Java โอเพ่นซอร์สสำหรับการทำงานกับ HTML จริง มันมี API ที่สะดวกมากสำหรับการดึงและจัดการข้อมูลโดยใช้เทคนิค DOM, CSS และ jQuery ที่ดีที่สุด Jsoup ใช้ข้อกำหนด WHATWG HTML5 และแยกวิเคราะห์ HTML เป็น DOM เดียวกันกับเบราว์เซอร์สมัยใหม่เช่น Chrome และ Firefox นี่คือคุณสมบัติที่มีประโยชน์บางประการของไลบรารี Jsoup:
- Jsoup สามารถขูดและแยก HTML จาก URL ไฟล์หรือสตริงได้
- Jsoup สามารถค้นหาและแยกข้อมูลโดยใช้ DOM traversal หรือตัวเลือก CSS
- Jsoup ช่วยให้คุณสามารถจัดการองค์ประกอบ HTML คุณลักษณะและข้อความได้
- Jsoup จัดทำ white-list ของข้อมูลที่ผู้ใช้ให้มาเพื่อป้องกันการโจมตี 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
ที่มีองค์ประกอบ (อย่างน้อย) ที่มีองค์ประกอบ "head" และ "body" ได้สำเร็จและมีความหมาย หากคุณมีอ็อบเจ็กต์ คุณสามารถรับข้อมูลที่ต้องการได้โดยการเรียกวิธีการ ที่
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
Jsoup HTML parser จะพยายามทุกวิถีทางเพื่อสร้างการแยกวิเคราะห์ HTML ที่ "สะอาด" ที่คุณระบุ ไม่ว่าจะมีรูปแบบที่ถูกต้องหรือไม่ก็ตาม สามารถจัดการกับข้อผิดพลาดต่อไปนี้:
- แท็กที่ไม่ได้ปิด ตัวอย่างเช่น,
<p>Java <p>Scala to <p>Java</p> <p>Scala</p>
- แท็กโดยนัย ตัวอย่างเช่น ของที่เปิดอยู่
<td>Java is Great</td>
จะถูกห่อไว้<table><tr><td>
- Jsoup สร้างโครงสร้างเอกสารที่แข็งแกร่ง (HTML ประกอบด้วยส่วนหัวและส่วนเนื้อหา แต่เนื้อหาประกอบด้วยองค์ประกอบที่เกี่ยวข้องเท่านั้น)
Jsoup เป็นไลบรารีโอเพ่นซอร์สที่ยอดเยี่ยมและเชื่อถือได้ ซึ่งทำให้การอ่านเอกสาร HTML, Body Fragment, สตริง HTML และการแยกวิเคราะห์เนื้อหาเว็บ HTML โดยตรงนั้นง่ายมาก
GO TO FULL VERSION