บางทีสักวันหนึ่งคุณจะต้องได้รับข้อมูลจากเว็บไซต์หรือเอกสาร HTML ในแอปพลิเคชันของคุณ และฉันจะบอกว่าโดยไม่ต้องกังวลใจอีกต่อไปว่าการใช้ไลบรารี jsoup จะทำให้งานของคุณง่ายขึ้นอย่างมาก
ตามวิกิ jsoup เป็นไลบรารี Java โอเพ่นซอร์สที่ออกแบบมาเพื่อการแยกวิเคราะห์การแยกและจัดการข้อมูลที่เก็บไว้ในเอกสาร 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
มี URL ของแหล่งคำขอ เมธอดนี้get()
จะส่ง IOException ที่ได้รับการจัดการ เพื่อให้เราสามารถรวมทุกอย่างไว้ในtry/catch
บล็อก หรือเพียงแค่โยนมันเพิ่มเติมด้วยthrows
. ขณะนี้เราได้รับซอร์สโค้ดสำหรับหน้านี้แล้ว หากจำเป็น ไลบรารี jsoup ก็สามารถกู้คืนองค์ประกอบที่เสียหายได้ ตอนนี้สิ่งที่เราต้องทำคือจำกัดการค้นหาให้แคบลงในบล็อกที่แยกจากกัน วิธีการนี้select()
มีการใช้งานให้เลือกมากมาย: ช่วยให้คุณสามารถค้นหาองค์ประกอบตามแท็ก คุณลักษณะ คลาส และพารามิเตอร์อื่น ๆ เบราว์เซอร์สมัยใหม่เกือบทั้งหมดรองรับความสามารถในการค้นหาซอร์สโค้ดขององค์ประกอบที่เลือกอย่างรวดเร็ว ด้วยการปรับเปลี่ยนอย่างง่าย เราจะค้นหาซอร์สโค้ดขององค์ประกอบที่เราต้องการ และรับdiv
บล็อกที่มีคลาสที่ระบุ ซึ่งเราจะใช้สำหรับการสุ่มตัวอย่าง 
Elements
จาก org.jsoup.select.Elements เพื่อเลือกองค์ประกอบทั้งหมดจากบล็อกที่เราเลือก
Elements listNews = doc.select("div#tabnews_newsc.content-tabs__items.content-tabs__items_active_true");
ตอนนี้เรามีสิ่งนี้: 
for (Element element : listNews.select("a"))
System.out.println(element.text());
วิธีนี้text()
ช่วยให้คุณละทิ้งโค้ดมาร์กอัปและเหลือเพียงข้อความผสมสำหรับองค์ประกอบขาเข้าทั้งหมด ผลลัพธ์ของการดำเนินการจะเป็นดังนี้: 
get(int index)
ไปยังหมายเลขตำแหน่งขององค์ประกอบที่เป็นปัญหา
System.out.println(listNews.select("a").get(2).text());
GO TO FULL VERSION