JavaRush /จาวาบล็อก /Random-TH /แยกวิเคราะห์ html ด้วยไลบรารี jsoup
Сергей
ระดับ
Москва

แยกวิเคราะห์ html ด้วยไลบรารี jsoup

เผยแพร่ในกลุ่ม
ดังนั้นเราจึงต้องการรับข้อมูลเฉพาะจากเว็บไซต์ มาดูวิธีการทำทีละขั้นตอนกัน แยกวิเคราะห์ html ด้วยไลบรารี jsoup - 1ก่อนอื่นเราต้องได้รับDocument. นี่คือการนำเสนอหน้า html ของเรา Jsoup มีหลายวิธีในการเปลี่ยนไซต์ให้เป็นไฟล์Document. เชื่อมต่อกับเซิร์ฟเวอร์
Document document = Jsoup.connect("https://hh.ru/").get();
Jsoup เชื่อมต่อกับไซต์เอง วิธีนี้เป็นวิธีที่ง่ายที่สุด แต่เหมาะสำหรับการทดสอบเท่านั้น มีไคลเอ็นต์ http ที่สะดวกและยืดหยุ่นมากขึ้น นอกจากนี้ โปรดจำไว้ว่าไม่ว่าคุณจะใช้ไคลเอ็นต์ http ใดก็ตาม ให้เพิ่มส่วนหัวให้กับคำขอUser-Agentด้วยค่าเช่นChrome/81.0.4044.138. เมื่อใช้ส่วนหัวนี้ เซิร์ฟเวอร์จะกำหนดอุปกรณ์ที่คุณเชื่อมต่อ หากไม่มีส่วนหัวนี้ เซิร์ฟเวอร์จะถือว่าคุณเป็นบอทและอาจแบนคุณ จากไฟล์ ;
File file = new File("hh-test.html");
Document document = Jsoup.parse(file, "UTF-8", "hh.ru");
Documentนี่เป็น วิธี หลักในการรับวัตถุ อาร์กิวเมนต์สุดท้าย "hh.ru"คือ URI พื้นฐาน นี่เป็นสิ่งจำเป็นในการสร้างลิงก์สัมบูรณ์จากลิงก์ที่เกี่ยวข้องซึ่งปรากฏบนเว็บไซต์ จากบรรทัด
String html =
                "<html>                                                                       " +
                "    <head>                                                                   " +
                "        <title href=\"hh.ru/vacancy?home\">                                  " +
                "            Работа в Москве, поиск персонала и публикация вакансий - hh.ru   " +
                "        </title>                                                             " +
                "    </head>                                                                  " +
                "    <body>                                                                   " +
                "        <div class=\"header main\">                                          " +
                "            <h1>Работа найдется для каждого</h1>                             " +
                "            <div>Поиск вакансий</div>                                        " +
                "        </div>                                                               " +
                "        <div class=\"content\">                                              " +
                "            <div>Вакансии дня</div>                                          " +
                "            <div id=\"123\">Компании дня</div>                               " +
                "            <div>Работа из дома</div>                                        " +
                "        </div>                                                               " +
                "    </body>                                                                  " +
                "</html>                                                                      ";

        Document document = Jsoup.parse(html, "hh.ru");
ต่อไป ฉันจะสาธิตไลบรารีใน html นี้ ซึ่งแสดงถึงไซต์แบบง่าย การรับแท็ก งานหลักเมื่อแยกวิเคราะห์คือการได้รับแท็กที่ต้องการ เราจะทำเช่นนี้โดยใช้วิธีselectการ โปรดทราบว่ามันจะส่งคืนรายการแท็กเสมอ หากไม่พบแท็ก รายการจะว่างเปล่า คุณต้องส่งตัวเลือก CSS ที่ใช้ค้นหาแท็กเป็นอาร์กิวเมนต์ของเมธอด ฉันจะเน้นรายละเอียดเพิ่มเติมเกี่ยวกับตัวเลือก เพราะงานทั้งหมดขึ้นอยู่กับการเขียนตัวเลือกที่ถูกต้อง โดยทั่วไปเราจำเป็นต้องเขียนมันเพื่อให้ส่งคืนแท็กเดียว
Elements h1 = document.select("h1");
System.out.println(h1);
รับแท็กแท็กh1 เอาท์พุต:

<h1>Работа найдется для каждого</h1>
Elements titleElem = document.select("head > title");
รับแท็titleก เครื่องหมาย>จะเลือกแท็กtitleที่ซ้อนอยู่ภายในแท็กhead
Elements divs = document.select("body > div");
รับแท็กdivที่ซ้อนกันbody
Elements firstDiv = document.select("body > div:nth-child(1)");
รับแท็กแรกdivที่ซ้อนอยู่ในbody. การเรียกแท็กด้วยหมายเลขซีเรียลเป็นวิธีที่ไม่ดี เนื่องจากตำแหน่งของแท็กบนไซต์อาจเปลี่ยนแปลงได้ เป็นการดีกว่าที่จะกำหนดแท็กโดยใช้พารามิเตอร์สัมบูรณ์ พารามิเตอร์เหล่านี้เป็นคุณลักษณะclassและid
Elements contentElem = document.select("body > div.content");
รับแท็กdivที่มีคลาส "เนื้อหา" ฝังอยู่body
Elements idElem = document.select("#123");
รับแท็กที่มีรหัส "123"
Elements divHeader = document.select("body > div.header.main :not(h1)");
รับแท็กdivที่มีคลาส "header" และ "main" ซึ่งซ้อนอยู่ในbodyแต่ไม่มีแท็กh1 ผลลัพธ์:

<div>
 Поиск вакансий
</div>
วิธีการขององค์ประกอบ เมื่อเราได้รับรายการแล้วElementsเราก็สามารถดึงข้อมูลจากรายการนั้นได้ ฉันขอเตือนคุณว่าโดยปกติตัวเลือกจะค้นหาแท็กเดียวนั่นคือ จะต้องElementsมีขนาด 1
elements.size();
จำนวนแท็กที่พบ
elements.get(0);
รับแท็กแรกจากรายการที่พบ
elements.text();
ข้อความที่ฝังอยู่ในแท็ก
elements.attr("href");
ค่าแอตทริบิวต์ "href"
elements.outerHtml();
การแสดงสตริงของแท็ก หากคุณต้องการรับตัวเลือกองค์ประกอบอย่างรวดเร็ว ให้เปิดแผงนักพัฒนาซอฟต์แวร์ (f12) ในเบราว์เซอร์ คลิกขวาที่องค์ประกอบ “ดูโค้ด” คลิกขวาที่แท็ก จากนั้น “คัดลอก” “ ตัวเลือกการคัดลอก” ตัวเลือกดังกล่าวจะไม่เหมาะสมที่สุด แต่ค่อนข้างเหมาะสำหรับผลลัพธ์ที่รวดเร็ว นี่คือ พื้นฐาน ของการทำงานกับไลบรารี Jsoup แต่นี่ก็เพียงพอที่จะแยกวิเคราะห์ไซต์ หากต้องการทำงานอย่างมั่นใจ สิ่งที่คุณต้องมีคือฝึกเขียนตัวเลือกบนเว็บไซต์จริง Ps ไลบรารีนี้ใช้เพื่อแก้ปัญหาใหญ่ที่ระดับ 38 แยกวิเคราะห์ html ด้วยไลบรารี jsoup - 1แยกวิเคราะห์ html ด้วยไลบรารี jsoup - 3
ความคิดเห็น
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION