JavaRush /จาวาบล็อก /Random-TH /แยกวิเคราะห์ HTML อย่างง่ายด้วย jsoup
Stanislav
ระดับ
Москва

แยกวิเคราะห์ HTML อย่างง่ายด้วย jsoup

เผยแพร่ในกลุ่ม
บางทีสักวันหนึ่งคุณจะต้องได้รับข้อมูลจากเว็บไซต์หรือเอกสาร 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บล็อกที่มีคลาสที่ระบุ ซึ่งเราจะใช้สำหรับการสุ่มตัวอย่าง การแยกวิเคราะห์ 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 ของฉัน ในขณะที่เขียน มีบอท Telegram หลายตัวที่ใช้ Jsoup เพื่อรับและแสดงข้อมูล
ความคิดเห็น
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION