Android

Phân tích HTML sử dụng Jsoup trong Android

Giới thiệu

Jsoup là một thư viện  mạnh mẻ được sử dụng khá nhiều trong Android dùng để bóc tách các thành phần của html thành các đối tượng trong Java Android. Việc sử dụng Jsoup như thế nào thì bài viết này sẽ cùng các bạn khám phá.

Trang chủ của Jsoup: https://jsoup.org/

Các ví dụ demo trong bài viết sử dụng Android Studio 2.0.

Cài đặt thư viện

Trước tiên tôi tạo project có tên JsoupDemo bằng Android Studio

Giao diện project khi tạo xong project

jsoup-android-0

Để cài đặt thư viện vào project vừa tạo các bạn paste dòng dưới đây vào dependen trong file build.gradle (Module: app)

Sau đó nhấn Sync Now để Android Studio tự động nạp thư viện vào project.

jsoup-android-1

Vậy là chúng ta đã cài đặt thành công thư viện Jsoup. Tiếp theo hãy cùng nhau tìm hiểu những tình năng mà thư viện này cung cấp.

Tạo Document từ input

Để tạo đối tượng Document có rất nhiều cách và từ rất nhiều input khác nhau.

Cách 1: Tạo Document từ string

Sử dụng chung phương thức tỉnh là:

Phương thức này trả về một đối tượng là Document, và từ đối tượng này chúng ta có thể phân tích bóc tách được tất cả các thành phần của Document này.

Cách 2: Tạo Document từ một phần nội dung

Sử dụng phương thức:

Ví dụ

Cách 3: Tạo Document từ url

Để tạo Document từ url có nghĩa là Android phải download nội dung của trang web đó thông qua network vì thế nếu dùng cách thứ ba này các bạn không được đặt trong UI Thread mà phải tạo Thread khác để xử lý ví dụ như AsyncTask,…

Nếu chưa có kiến thức về lập trình đa luồng trên Android bạn có thể xem lại bài viết MultiThreading: AsyncTask trong Android của tôi.

Để tạo Documnet từ url chúng ta sử dụng phương thức.

Ví dụ

Và trong phần bóc tách dữ liệu từ document được giới thiệu ở phía dưới, tôi cũng sẽ sử dụng cách này.

Cách 4: Tạo Document từ File

Sử dụng phương thức

Ví dụ:

Bóc tách dữ liệu từ Document

Trong ví dụ thực hành này tôi sẽ lấy tất 50 chủ đề trong trang http://600tuvungtoeic.com/ với mỗi chủ đề bao gồm link hình ảnh và tên chủ đề.

Vì việc lấy data có sử dụng network nên tôi phải cấp quyền sử dụng Internet trong Manifest của project

Công việc bây giờ tôi chỉ xử lý method doInBackground.

Chúng ta vào trang chủ http://600tuvungtoeic.com/

jsoup-android-2

Và bật kiểm tra phần tử lên. Thấy rằng những chủ đề trên đều có điểm chung đó là đều nằm trong thẻ div có class là content-gallery:

jsoup-android-3

Vì vậy chúng ta sẽ lấy tất cả những thẻ div có class là content-gallery

Sau đó lần lượt duyệt qua tất cả các phần tử trong subjectElements để lấy ra các thông tin là link hình ảnh và tiêu chủ đề.

Mở thẻ div có class là content-gallery ra chúng ta thấy nội dung như dưới đây:

jsoup-android-4

Thấy rằng thẻ img chứ hình ảnh và thẻ h3 chứa title vì vậy chúng ta cần lấy ra hai Element có hai thẻ này.

Tiếp theo lấy các thuộc tính của từng element.

Source code method doInBackground

Chạy ứng dụng để thấy kết quả. Các bạn sẽ thấy chúng ta lấy được tên của chủ đề và đường dẫn hình ảnh của 50 chủ đề như sau:

jsoup-android-5

Lời kết

Với việc sử dụng thư viện Jsoup để bóc tách dữ liệu từ html chúng ta có thể có được những dữ liệu xây dựng được app. Hay chắc lọc nhiều dữ liệu phục vụ cho mục địch nghiên cứu. Việc sử dụng thư viện Jsoup không khó và đòi hỏi bạn phải có những kiến thức cơ bản về html. Nếu trong bài viết có bất cứ thắc mắc nào hãy để lại bình luận ở dưới bài viết hoặc liên hệ với fanpage Eitguide Android để chúng ta cùng trao đổi.

13 thoughts on “Phân tích HTML sử dụng Jsoup trong Android”

  1. anh ơi có thể chỉ cho em là sau khi lấy được dữ liệu như vậy rồi mình phải sử dụng nó thế nào vậy

  2. Hi add.
    Add cho mình hỏi. Mình muốn bóc tách html để lấy link mp3 từ 1 trang web nghe nhạc trực tuyến mp3.zing. thì làm kiểu gì ạ.
    tks add

  3. Xin chào, mình mới học qua Android, và có vấn đề cần hỏi, xin mọi người chỉ giáo.

    Mình đang viết demo để lấy hình ảnh từ trang gg search
    Sau khi sử dụng Jsoup thì mình get được 100 item image

    Nhưng trên web browser thì mình có thể scroll mouse để get tiếp resource,
    vậy trong Android mình phải làm thế nào để get được nhiều hơn.

    Có API nào hỗ trợ, hoặc có cách nào để thực hiện việc đó không.

    Thanks,

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.