CHƯƠNG 1: TỔNG QUAN VỀ TÌM KIẾM VÀ THEO DÕI THÔNG TIN
1.3. Theo dõi và thu thập dữ liệu
Máy chủ (server) là phần chịu trách nhiệm tìm kiếm, xử lý và lưu trữ các tin bài liên quan đến những từ khóa, vấn đề mà người dùng đã đăng kí với hệ thống.
Phía máy chủ thực hiện các chức năng của mình thông qua việc tìm kiếm các tin bài trên Internet thông qua công cụ tìm kiếm Google. Sau đó tiến hành phân tích và lưu trữ những thông tin cần thiết vào cơ sở dữ liệu.
Có hai cách cơ bản để lấy về các tin bài từ các công cụ tìm kiếm:
- Cách thứ nhất là sử dụng các APIs như đã trình bày trong chương 1 để yêu cầu và lấy về phản hồi của công cụ tìm kiếm dưới dạng JSON hoặc XML. Sau đó tiến hành phân tích kết quả và trích xuất ra những trường kết quả mong muốn và lưu vào cơ sở dữ liệu. Tuy nhiên cách này khiến ta trở nên bị động và bị phụ thuộc vào APIs của các nhà cung cấp. Bị giới hạn về mặt số lƣợng kết quả, số yêu cầu cho phép, và có thể sẽ phải trả phí để có đƣợc những kết quả mong muốn.
- Cách thứ hai đó là trích xuất kết quả trực tiếp từ trang web của các công cụ tìm kiếm. Do bằng cách này người phát triển sẽ chủ động tìm
kiếm mà không phụ thuộc vào các APIs của công cụ tìm kiếm nên sẽ chủ động đƣợc số lƣợng kết quả mong muốn từ việc yêu cầu tìm kiếm.
Do hệ thống chỉ sử dụng kết quả duy nhất từ trang tìm kiếm của Google, cần số lượng lớn các kết quả liên quan đến vấn đề mà người dùng mong muốn theo dõi.
Nên để tăng hiểu quả, trong hệ thống phía máy chủ của mình, tôi sử dụng cách thứ hai, đó là trích xuất trực tiếp thông tin trên mã nguồn HTML của trang web tìm kiếm.
Chức năng theo dõi và thu thập dữ liệu là phần chứa các hàm phục vụ việc gửi các yêu cầu đến Google thông qua đường dẫn:
https://www.google.com/search?lr=lang_vi&q=qsearch&safe=off&start=1&t bs=qdr:h,lr:lang_1vi
Trong đó có một số truy vấn quan trọng
- q=qsearch trong đó q= là truy vấn của Google, và qsearch chính là từ khóa cần tìm kiếm.
- tbs=qdr:h nghĩa là tìm kiếm các tin bài trong một giờ trước. ta có thể sử dụng „d‟ là các tin bài trong ngày qua, hoặc „m‟ là các tin bài trong tháng qua…
- Ngoài ra chúng ta có thể thêm một số khác để đảm bảo các kết quả đáp ứng đƣợc các yêu cầu nhƣ lr=lang_vi là tìm kiếm bằng ngôn ngữ Tiếng Việt, hay start=1 là hiển thị từ kết quả số 1,…
Sau đó sẽ lấy về HTML của trang đó và phân tích lấy những kết quả mong muốn, ở đây các kết quả được coi là Model với các trường giống nhau. Và lưu vào cơ sở dữ liệu thông qua các hàm.
Nhìn chung, quá trình hoạt đông của phía máy chủ gồm qua các bước cơ bản nhƣ sau:
Hình 1.5: Các bước xử lý của máy chủ.
Bước thứ nhất: là gửi yêu cầu đến các công cụ tìm kiếm về tất cả các từ khóa của hệ thống. Với mỗi trang hiển thị của Google, cho phép hiển thị 10 kết quả. Sau đó ta lấy về toàn bộ mã nguồn của trang web kết quả.
Bước thứ hai: Tiếp theo sau khi lấy được trang kết quả về, hệ thống sẽ tiến hành phân tích mã nguồn HTML đã thu đƣợc để trích xuất những thông tin cần thiết. Như đã trình bày trong phần 1.2.1, về một số phương pháp trích xuất thông tin, luận văn sử dụng phương pháp dựa trên mô hình cây DOM để sinh ra luật nhằm trích xuất các thông tin cần thiết từ các trang có cấu trúc tương tự. Các kết quả hiển thị của Google ví dụ nhƣ hình:
Hình 1.6: Các kết quả hiển thị của Google.
Cấu trúc của các dữ liệu tương ứng với một kết quả hiển thị dưới dạng HTML nhƣ sau:
Hình 1.7: Mã HTML của một kết quả hiện thị.
Ta có Hình 1.6 là biểu diễn HTML của một kết quả, cụ thể là kết quả đầu tiên trong Hình 1.5. Tương ứng ta có: Phần a trong Hình 1.5 tương ứng với đoạn mã 1 trong hình 1.6 nó biểu diễn tiêu đề của bài viết ở trang web gốc (Title). Phần b tương đương với đoạn mã 2, nó biểu diễn hiển thị của liên kết(Url) đến trang web gốc (DisplayUrl), và phần c tương ứng với đoạn mã 3, nó biểu diễn đoạn tóm tắt tội dung, hoặc là miêu tả ngắn gọn cho bài viết trong trang web gốc (Description). Nhƣ vậy sau khi phân tích mã trang ta có được những thuộc tính chung cần thiết để lưu trữ đó là:
- Title: tiêu đề của bài trang.
- Url: đường liên kết đến trang web gốc.
- DisplayUrl: Hiển thị của liên kết
- Description: Mô tả ngắn gọn của bài viết đƣợc đề cập đến.
Cây DOM ta xây dựng đƣợc từ mã HTML cho mỗi kết quả tìm kiếm trên trang tìm kiếm nhƣ sau:
Hình 1.8: Mô hình cây DOM của mỗi kết quả.
Từ mô hình ta đã xây dựng ở trên, để trích xuất đƣợc thông tin đƣợc chứa trong các thẻ, ta phải xác định định danh hay nhãn của các thẻ chứa nó. Có thể xác định định danh thông qua các thuộc tính:
- Thẻ tag: ví dụ „div‟, „a‟, …
- Id của thẻ, id là duy nhất: ví dụ <DIV id = “content”>…</div>
- Một hoặc nhiều Class của thẻ: ví dụ <DIV class = “class1 class2”>…</div>
- Qua các node có quan hệ với node cần định danh nhƣ node cha (parent), hay anh em (next, previous), con (children),..
Những giá trị cần lấy của các thẻ nhƣ:
- Thuộc tính và giá trị của thuộc tính: nhƣ „href‟, „style‟,..
- Dữ liệu văn bản (text) - …
Sau khi định danh được các thẻ chứa thông tin, ta có các đường đi đến các thông tin cần, cụ thể là từ các kết quả của Google nhƣ sau:
- Đường dẫn đến Tiêu đề của trang web kết quả (title):
<OL id = “rso”><DIV class = “srg”><LI class =
“g”><DIV class = “rc”><h3 class = “r” ><A>.text - Đường dẫn đến Liên kết (Url) của trang web gốc:
<OL id = “rso”><DIV class = “srg”><LI class =
“g”><DIV class = “rc”><h3 class = “r” > href[<A>]
- Đường dẫn đến Hiển thị của đường liên kết (DisplayUrl):
<OL id = “rso”><DIV class = “srg”><LI class =
“g”><DIV class = “rc”><DIV class = “s” ><DIV><DIV class = “f kv _os”><cite>.text
- Đường dẫn đến đoạn Mô tả của trang web gốc (Description):
<OL id = “rso”><DIV class = “srg”><LI class =
“g”><DIV class = “rc”><DIV class = “s” ><DIV><SPAN class = “st”>.text.
Đường đi trên áp dụng được với mọi kết quả trong danh sách hiển thị của Google, nên ta chỉ cần xác định một lần để áp dụng cho tất cả.
Bước thứ ba: Lưu những thông tin sau khi đã trích xuất được từ mã nguồn trang web vào các bảng tương ứng trong cơ sở dữ liệu