ดังนั้นเราจึงต้องการรับข้อมูลเฉพาะจากเว็บไซต์ มาดูวิธีการทำทีละขั้นตอนกัน ก่อนอื่นเราต้องได้รับ
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
GO TO FULL VERSION