Cơng cụ rút trích dữ liệu HtmlAgiliti Pack

Một phần của tài liệu Nghiên cứu xây dựng hệ thống tổng hợp, phân loại thông tin tự động trên Web (Trang 65 - 67)

CHƢƠNG 1 : KHAI PHÁ DỮ LIỆU

3.2.1.Cơng cụ rút trích dữ liệu HtmlAgiliti Pack

3.2. Giải pháp và cơng nghệ sử dụng

3.2.1.Cơng cụ rút trích dữ liệu HtmlAgiliti Pack

Html Agility Pack (HAP) là một bộ thƣ viện mã nguồn mở miễn phí đƣợc thiết kế nhằm mục đích đơn giản hĩa việc đọc và ghi tài liệu HTML, nĩ phục vụ đắc lực cho việc rút trích dữ liệu trên bất kỳ một tài liệu HTML nào. Nĩ cĩ thể dùng nĩ để rút trích, sửa đổi dữ liệu trên một trang web cần lấy dữ liệu, từ đĩ cĩ thể lƣu trữ vào cơ sở dữ liệu. Tồn bộ quá trình sẽ đƣợc tự động hĩa hồn tồn.

Thƣ viện này cho phép duyệt qua nội dung HTML nhƣ là một tài liệu XML bằng cú pháp của XPath. Từ đĩ cĩ thể truy xuất và lấy dữ liệu trên cây DOM (Document Object Model) của tài liệu HTML, di chuyển từ node này sang node khác, hoặc chuyển đến node con một cách dễ dàng.

Để sử dụng HAP, yêu cầu bộ NetFramework version 3.5 trở lên.

HAP đƣợc đĩng gĩi gọn trong một bộ thƣ viện HtmlAgilityPack.dll. Để sử dụng, copy thƣ viện này vào thƣ mục “bin” của website của mình, sau đĩ Add Reference dll này vào project.

Ví dụ 1: Liệt kê Meta Tags cĩ trên Website

Ví dụ về cách dùng HAP để download một trang web trên mạng và rút trích các thẻ <meta> của nĩ, chứa cả thuộc tính name và content.

using HtmlAgilityPack; //khai báo sử dụng namespace HtmlAgilityPack var webSite = new HtmlWeb(); //tạo một object chứa trang web

var doc = webSite.Load(“http://www.tinmoi.vn/”);

// dùng object webSite để download web page cĩ url, ví dụ: http://www.tinmoi.vn/ var metaTags = doc.DocumentNode.SelectNodes("//meta")// chọn các thẻ cĩ name là “meta”

if (metaTags != null) {

foreach (var tag in metaTags) {

if (tag.Attributes["name"] != null && tag.Attributes["content"] != null) {

// Xuất ra kết quả của tag.Attributes["name"].Value và tag.Attributes["content"].Value

} } }

Ví dụ 2: Liệt kê các đƣờng link trên Website

Nếu trong ví dụ 1, ta sử dụng phƣơng thức SelectNodes và các câu lệnh của XPath để đi đến một node nào đĩ, thì ở ví dụ 2 ta dùng cú pháp của LINQ.

Trong ví dụ này, ta sẽ nhập vào địa chỉ trang web mình muốn lấy thơng tin vào TextBox (tên là textbox_Url), sau khi nhấn nút “Tìm”, tác vụ rút trích sẽ lấy ra tồn bộ các thẻ <a> cĩ thuộc tính href và phần text của nĩ. Sau đĩ bind vào một ListView (tên là lv_link) :

Đây là phần code phía server, nằm trong hàm button click: }

string url = textbox_Url.Text; var web = new HtmlWeb(); var doc = web.Load(url);

var links = from lnk in doc.DocumentNode.Descendants() where lnk.Name == "a" &&

lnk.Attributes["href"] != null && lnk.InnerText.Trim().Length > 0 selectnew { link = lnk.Attributes["href"].Value, text = lnk.InnerText }; lv_link.DataSource = links; lv_link.DataBind(); }

Ví dụ 3: Rút trích nội dung tin tức trên Website.

Kết quả ta cĩ ngay 3 thơng tin: tựa đề, link, nội dung của tin tức đầu tiên mới nhất trên một website tin tức:

Code phía server: {

string url = "http://www.tinmoi.vn/"; var web = newHtmlWeb();

var doc = web.Load(url);

var info = doc.DocumentNode.Descendants() .Where(n => n.Name == "h3"

&& n.Attributes["class"].Value == "title-site") .FirstOrDefault();

TextBox1.Text = info.FirstChild.InnerText;

TextBox2.Text = info.FirstChild.Attributes["href"].Value;

TextBox3.Text = info.NextSibling.SelectSingleNode("//p").InnerText; } (adsbygoogle = window.adsbygoogle || []).push({});

Một phần của tài liệu Nghiên cứu xây dựng hệ thống tổng hợp, phân loại thông tin tự động trên Web (Trang 65 - 67)