Bên cạnh Selenium thì Jsoup cũng là một thư viện tương đối phổ biến được sử dụng trong Web Scraping. Ưu điểm lớn nhất của việc sử dụng Jsoup so với Selenium là Jsoup có tốc độ nhanh hơn (do Selenium chạy trên Browser). Trong Jsoup, chúng ta có thể truy suất thông tin thu được bằng các sử dụng DOM hoặc sử dụng CSS selectors. Ngoài ra, Jsoup còn cho phép người dùng tiến hành thao tác trên các elements, attribute và text của file HTML; loại bỏ các phần phức tạp, không cần thiết để trả về kết quả đơn giản, thân thiện với người dùng,…

* Lưu ý: Jsoup là một HTML parser nên ta không thể dùng Jsoup để thực hiện các thao tác như click button, click link,… Để có thể tương tác với các phần tử web này ta có thể dùng Selenium như đã hướng dẫn trong bài tutorial Sử dụng CSS Selector và XPath trong Selenium. Trong thực tế, ta thường kết hợp Selenium và Jsoup để giải quyết các bài toán cụ thể. Selenium được dùng để giả lập một web browser và tương tác với các phần tử web để tải về file HTML. Sau đó ta dùng Jsoup để xử lý và truy suất thông tin từ file HTML này.

Để viết một chương trình sử dụng Jsoup, trước hết ta cần thêm dependency của Jsoup vào file pom.xml như sau:

Jsoup cho phép ta đọc dữ liệu từ nhiều nguồn khác nhau như từ file, string hoặc URL. Trong bài này, chúng ta sẽ sử dụng Jsoup để truy cập dữ liệu từ một url cho trước (“https://www.tutorialspoint.com/jsoup/index.htm”) và sử dụng hàm “Jsoup.connect(url).get()” để chuyển file HTML thành Document object:

Khi làm việc với Jsoup ta thường sử dụng Document object (biểu thị cho HTML DOM) và truy xuất các thông tin của file HTML từ các hàm chức năng của object này như .title(), .body(), .getElementsById(), .getElementsByClass(), .getElementByTag(),…(các bạn có thể tham khảo cách tìm id, class, tag của các phần tử trong HTML trong bài tutorial Soát lỗi chính tả sử dụng Ginger và Selenium )

Chạy đoạn code trên ta được kết quả (kết quả này sẽ thay đổi tùy thuộc vào cấu trúc cũng như nội dung của trang Web):

Tiếp theo, ta tiến hành liệt kê tất cả các links trong trang web trên bằng cả hai phương pháp là sử dụng DOM và sử dụng CSS selectors. Phương pháp sử dụng DOM được thực hiện bằng các sử dụng các hàm như getElementsById(), getElementsByClass(), getElementByTag() với tham số đầu vào là tên id, class, tag tương ứng. Ở đây ta sử dụng hàm getElementByTag(“a”) với tag ‘a’ biểu thị cho hyperlink trong HTML. Phương pháp thứ 2, sử dụng CSS Selectors được thực hiện bằng các sử dụng hàm .select() với tham số đầu vào các các CSS Query (các bạn có thể tham khảo cách sử dụng các CSS Selectors tại đây).

Chạy đoạn code trên ta được kết quả:

Tương tự như trên, ta cũng có thể sử dụng Jsoup để liệt kê tất cả các các ảnh có trong trang Web. Ở đây ta sử dụng CSS Selectors và Regular Expression để có thể lọc kết quả như mong muốn (ta có thể tìm tên attribute key là tham số đầu vào của hàm .attr() bằng cách xem source code của trang web tương tự như tìm id, class, tag ở trên).

Như vậy ta đã hoàn thành việc viết một chương trình sử dụng Jsoup để truy xuất dữ liệu từ một trang Web với địa chỉ URL cho trước. Các bạn có thể tham khảo full code của chương trình dưới đây.

Tháng Mười Hai 24, 2018
ITechSeeker