JavaRush /Blog Java /Random-VI /Phân tích cú pháp html bằng thư viện jsoup
Сергей
Mức độ
Москва

Phân tích cú pháp html bằng thư viện jsoup

Xuất bản trong nhóm
Vì vậy, chúng tôi muốn có được thông tin cụ thể từ trang web. Chúng ta hãy xem cách thực hiện việc này từng bước một. Phân tích cú pháp html bằng thư viện jsoup - 1Đầu tiên chúng ta cần lấy Document. Đây là một đại diện của trang html của chúng tôi. Jsoup có một số cách để biến một trang web thành một trang Document. Kết nối với máy chủ
Document document = Jsoup.connect("https://hh.ru/").get();
Jsoup tự kết nối với trang web. Phương pháp này đơn giản nhất nhưng chỉ thích hợp để thử nghiệm. Có nhiều ứng dụng khách http thuận tiện và linh hoạt hơn. Ngoài ra, hãy nhớ rằng, cho dù bạn sử dụng ứng dụng khách http nào, hãy thêm tiêu đề vào yêu cầu User-Agentcó giá trị như Chrome/81.0.4044.138. Sử dụng tiêu đề này, máy chủ sẽ xác định bạn đã kết nối từ thiết bị nào. Nếu không có tiêu đề này, máy chủ sẽ coi bạn là bot và có thể cấm bạn. Từ tập tin ;
File file = new File("hh-test.html");
Document document = Jsoup.parse(file, "UTF-8", "hh.ru");
Đây là cách chính để có được một đối tượng Document. Đối số cuối cùng "hh.ru"là URI cơ sở. Điều này là cần thiết để tạo các liên kết tuyệt đối từ những liên kết tương đối có trên trang web. Từ dòng
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");
Tiếp theo, tôi sẽ trình diễn thư viện trong html này, đại diện cho một trang web được đơn giản hóa. Lấy thẻ Nhiệm vụ chính khi phân tích cú pháp là lấy thẻ mong muốn. Chúng tôi sẽ làm điều này bằng cách sử dụng phương pháp select. Lưu ý rằng nó luôn trả về một danh sách các thẻ. Nếu không tìm thấy thẻ nào, danh sách sẽ trống. Bạn cần chuyển một bộ chọn CSS theo đó các thẻ được tìm kiếm làm đối số phương thức. Tôi sẽ tập trung vào bộ chọn chi tiết hơn, bởi vì tất cả công việc đều phụ thuộc vào việc viết bộ chọn chính xác. Thông thường chúng ta cần soạn nó để nó trả về một thẻ duy nhất.
Elements h1 = document.select("h1");
System.out.println(h1);
Nhận thẻ thẻ h1 Đầu ra:

<h1>Работа найдется для каждого</h1>
Elements titleElem = document.select("head > title");
Nhận thẻ title. Dấu hiệu >chọn các thẻ titleđược lồng trong một thẻhead
Elements divs = document.select("body > div");
Nhận các thẻ divlồng nhaubody
Elements firstDiv = document.select("body > div:nth-child(1)");
Lấy thẻ đầu tiên divđược lồng trong body. Truy xuất thẻ theo số sê-ri là một cách không tốt vì vị trí của thẻ trên trang web có thể thay đổi. Tốt hơn là xác định thẻ bằng các tham số tuyệt đối. Các tham số này là thuộc tính classid
Elements contentElem = document.select("body > div.content");
Nhận thẻ divcó lớp "nội dung", được lồng trongbody
Elements idElem = document.select("#123");
Nhận thẻ có id "123"
Elements divHeader = document.select("body > div.header.main :not(h1)");
Nhận các thẻ divcó lớp "tiêu đề" và "chính", được lồng trong body, nhưng không có thẻ h1 .

<div>
 Поиск вакансий
</div>
Các phương thức của phần tử Khi chúng ta đã nhận được một danh sách, Elementschúng ta có thể trích xuất dữ liệu từ nó. Hãy để tôi nhắc bạn rằng bộ chọn thường tìm kiếm một thẻ, tức là. phải Elementscó kích thước 1.
elements.size();
số lượng thẻ được tìm thấy
elements.get(0);
lấy thẻ đầu tiên từ danh sách tìm thấy
elements.text();
văn bản được nhúng trong thẻ
elements.attr("href");
giá trị thuộc tính "href"
elements.outerHtml();
biểu diễn chuỗi của thẻ Nếu bạn cần nhanh chóng lấy bộ chọn phần tử, hãy mở bảng dành cho nhà phát triển (f12) trong trình duyệt, nhấp chuột phải vào phần tử, “xem mã”, nhấp chuột phải vào thẻ, sau đó “Sao chép” “ Sao chép bộ chọn”. Bộ chọn như vậy sẽ không tối ưu nhưng khá phù hợp để có kết quả nhanh chóng. Kết luận Đây là những điều cơ bản khi làm việc với thư viện Jsoup. Nhưng điều này là khá đủ để phân tích các trang web. Để làm việc một cách tự tin, tất cả những gì bạn cần là thực hành viết bộ chọn trên các trang web thực. Ps Thư viện này dùng để giải một bài toán lớn ở cấp độ 38 Phân tích cú pháp html bằng thư viện jsoup - 1Phân tích cú pháp html bằng thư viện jsoup - 3
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION