Sử dụng cây DOM để trích rút thông tin cho ứng dụng đọc tin

Một phần của tài liệu 28012_171220200190175LUANVAN (Trang 51 - 59)

6. Bố cục của luận văn

2.3.3.Sử dụng cây DOM để trích rút thông tin cho ứng dụng đọc tin

tin nhanh

Theo tìm hiểu lý thuyết ở nội dung phần trƣớc, để trích rút thông tin cần thiết ở một node của cây DOM, chúng ta cần chỉ rõ đƣờng đi từ gốc của cây đến node cần trích rút thông tin. Đƣờng đi này gọi là một mẫu trích rút hay mẫu bóc tách (XPath). Chúng ta có thể dễ dàng lấy nội dung của mẫu bóc tách bằng sử dụng một số công cụ trên trình duyệt, nhƣ công cụ Firebugs trên trình duyệt Firefox, công cụ mặc định của Chrome, Internet Explorer bằng cách bấm phím tắt F12 trên bàn phím máy tính để hiển thị công cụ.

a. Các bước trích rút thông tin dựa trên cây DOM

Để trích rút thông tin bằng phân tích mã HTML dựa trên cấu trúc cây DOM, chúng ta sẽ lần lƣợt đi hết cấu trúc cây DOM của trang web, phân tích xem thông tin cần lấy nằm ở nhánh nào của cây DOM và tiến hành trích rút thông tin dựa trên ID của các thẻ HTML.

Hình 2.6. Các bước trích rút thông tin dựa trên cấu trúc cây DOM

Các bƣớc trích rút thông tin dựa trên cây DOM đƣợc tiến hành nhƣ sau:

Bước 1: Xác định mẩu thông tin cần hiển thị trên ứng dụng.

Bước 2: Duyệt cây cấu trúc cây DOM của trang web lấy tin.

Bước 3: Xác định địa chỉ của mẩu tin cần lấy dựa vào ID của chúng.

Bước 4: Tiến hành trích rút thông tin dựa vào ID của mẩu tin.

Bước 5: Hiển thị mẩu tin lên trang tin của ứng dụng.

b. Phân tích mã HTML trang web

Công việc đầu tiên của quá trình trích rút thông tin là phân tích mã HTML của website. Hầu hết tất cả các trang web đều có cấu trúc mã HTML riêng để hiển thị các nội dung của trang. Để lấy một phần trang web, đòi hỏi chúng ta phải cần biết nội dung cần lấy nằm ở phần nào của cấu trúc HTML từ đó dựa vào ID của các thẻ để lấy về phần nội dung cần trích rút thông qua ngôn ngữ truy vấn CSS Selector.

c. Truy vấn trang web bằng ngôn ngữ CSS Selector Queries

Nhƣ chúng ta đã biết trong một tập tin HTML thì có rất nhiều thẻ giống nhau và thông thƣờng chúng ta sẽ đặt các ID, class cho các thẻ để phân biệt. Trong CSS sẽ dựa vào các ID và class đó để truy xuất tới và cách truy xuất đó gọi là Selector hay còn gọi là ngôn ngữ truy vấn CSS Selector.

Chúng ta có thể thông qua trang web https://try.jsoup.org/ để thử viết các câu lệnh truy vấn CSS Selector.

Hình 2.7. Truy vấn nội dung trang web bằng CSS Selector Queries

Hình 2.12 minh họa trích rút một phần thông tin giá vàng từ trang web http://www.24h.com.vn/ttcb/giavang/giavang.php sử dụng ngôn ngữ CSS Selector Queries.

d. Trích rút thông tin bảng xếp hạng bóng đá

* Mô tả bài toán

Đầu vào của bài toán: Website thethao247.

Đầu ra của bài toán: Nội dung Bảng Xếp Hạng Bóng Đá trích rút từ website thethao247.

* Xây dựng cây DOM của trang web bằng phân tích mã HTML

Dựa vào phân tích mã HTML của trang web, chúng ta xây dựng đƣợc cấu trúc cây DOM của trang web nhƣ sau:

Hình 2.8. Cây DOM để trích rút thông tin bảng xếp hạng * Bộ dữ liệu mẫu trích rút các thông tin

Tiêu đề bảng xếp hạng: HTML -> BODY -> DIV-> … DIV -> H3 -> Bảng Xếp Hạng

Nội dung về thứ hạng: HTML -> BODY -> DIV-> … DIV -> TABLE -> TR -> TD -> Thứ hạng

Nội dung về tên đội: HTML -> BODY -> DIV-> … DIV -> TABLE -> TR -> TD -> Tên đội

Nội dung về số trận đã đá: HTML -> BODY -> DIV-> … DIV -> TABLE -> TR -> TD -> Số trận đã đá

Nội dung về số trận thắng: HTML -> BODY -> DIV-> … DIV -> TABLE -> TR -> TD -> Thắng

Nội dung về số trận hòa: HTML -> BODY -> DIV-> … DIV -> TABLE -> TR -> TD -> Số trận hòa (adsbygoogle = window.adsbygoogle || []).push({});

* Tiến hành trích rút thông tin

Website nguồn chứa rất nhiều thông tin không liên quan và các biển quảng cáo. Thông tin quan trọng chúng ta cần lấy là Bảng Xếp Hạng Giải Bóng Đá Ngoại Hạng Anh (England - Premier League) để hiển thị lên trang tin của ứng dụng.

Hình 2.9. Nội dung trang web thethao247

Hình 2.10. Cấu trúc HTML của trang web thethao247

Thông tin của Bảng Xếp Hạng về Thứ Hạng (#), Tên Đội (Tên đội), Số Trận Đã Đá (P), Thắng (W), Hòa (D), Thua (L), Số Bàn Thắng (F), Thủng Lưới (A), Số Hiệu Bàn Thắng (GD), Số Điểm (Điểm) hiển thị trong các cột của bảng trên trang web thực tế đã đƣợc lƣu thông qua các thẻ <tr> và <td>. Để trích rút các thông tin này về trang tin của trang web, chúng ta chỉ việc lấy ID của các thẻ <td> và dựa vào các ID này để lấy tin về các tin của ứng dụng.

Thông tin về cột Thứ Hạng đƣợc lƣu trong thẻ <td> với ID là "ltid". Khi muốn lấy thông tin về cột Thứ Hạng ta chỉ cần trỏ đến thẻ <td> và gọi về ID = "ltid".

Tƣơng tự, khi muốn lấy thông tin về cột Tên Đội, chúng ta sẽ trỏ đến thẻ <td> và gọi về ID = "ltn".

Khi muốn lấy thông tin về Số Trận Đã Đá, chúng ta sẽ trỏ đến thẻ <td> và gọi về ID = "ltg".

Khi muốn lấy về thông tin về Số Điểm, chúng ta sẽ trỏ đến thẻ <td> và gọi về ID = "ltp".

Hình 2.11. Thông tin Bảng Xếp Hạng Bóng Đá của trang web thethao247

Tƣơng tự phƣơng pháp trích rút về thông tin Bảng Xếp Hạng, chúng ta cũng có thể dùng thuật toán để trích rút nhiều tin khác nhƣ thông tin về giá vàng, giá ngoại tệ, dự báo thời tiết, kết quả sổ số từ các trang web khác nhau.

e. Cài đặt các bước trích rút thông tin trên ngôn ngữ Java

Để lấy mẩu thông tin về Bảng Xếp Hạng của trang web, các bƣớc trích rút thông tin đƣợc cài đặt khi viết trên ngôn ngữ Java nhƣ sau:

Document document = Jsoup.connect(url_bxh).get(); Elements exephang = document.select("td.ltid"); int aa = exephang.size();

for (int i = 0; i < aa; i++) {

xepHang += "\n\n" + exephang.get(i).text(); }

Elements elements = document.select("td.ltn"); int a = elements.size();

for (int i = 0; i < a; i++) {

string += "\n\n" + elements.get(i).text(); }

Elements etran = document.select("td.ltg"); int b = etran.size();

for (int i = 0; i < b; i++) {

tran += "\n\n" + etran.get(i).text(); }

Elements ediem = document.select("td.ltp"); int c = ediem.size(); for (int i = 0; i < c; i++) {

diem += "\n\n" + ediem.get(i).text(); }

Một phần của tài liệu 28012_171220200190175LUANVAN (Trang 51 - 59)