Cấu trúc phần trang chủ

Một phần của tài liệu Luận văn:Tìm hiểu về trình thu thập web và xây dựng trang web tổng hợp thông tin doc (Trang 48 - 56)

Thông qua cấu trúc bài viết ở trên ta thấy rằng để xây dựng thành công trang web thu thập tin tự động ta cần phải thu thập được phần nội dung bài viết và phần nội dung các chuyên mục. Cách làm phổ biến hiện nay là thu thập toàn bộ nội dung bài viết lưu vào cơ sở dữ liệu để tiện cho việc xây dựng trang web, tôi gọi đây là cách làm truyền thống. Trong quá trình tìm hiểu và xây dựng trang web, tơi đã nhận ra một số khuyết

điểm của cách làm này, từ đó đã tìm ra một cách làm mới có một số cải tiến sáng tạo

có thể hạn chế được các khuyết điểm của cách làm truyền thống. Ở phần sau của khóa luận tơi sẽ lần lượt trình bày hai cách làm và phân tích ưu nhược điểm của chúng.

42

2.3.2. Các cách thu thập bài viết 2.3.2.1. Cách làm truyền thống 2.3.2.1. Cách làm truyền thống 2.3.2.1.1. Các bước thực hiện

Quá trình thu thập bài viết được chia thành các bước: Bước 1: Thu thập URL bài viết

Ở bước này chúng ta sẽ thu thập tất cả các đường dẫn URL ứng với các trang bài viết.

Tất cả các trang báo điện tử hiện nay đều lưu trữ các bài viết theo các chuyên mục (category), việc làm này làm cho trang báo trực quan và thuận tiện cho người dùng khi muốn tìm kiếm thơng tin. Với trang báo điện tử lớn như Dân trí thì ngồi các bài viết cịn có rất nhiều các chuyên mục quảng cáo, các đường dẫn javascrips, các mục bài viết lồng nhau (ví dụ như phần tiêu điểm, tin nổi bật ...) chính vì thế vấn đề đặt ra

trước hết là phải lọc được các URL bài viết theo các category, sau đó phải có một cơ chế để tránh lấy một URL nhiều lần.

Để lấy ra các đường dẫn URL ta có thể dùng hàm preg_math với $pattern là một biểu

thức chính quy lấy ra các siêu liên kết. Kết quả thu được là một mảng với các phần tử là các URL.

Sau đây là một ví dụ minh họa việc lấy ra các URL trong danh mục phapluat của trang Dân trí:

<?php

$crawler=file_get_contents('http://dantri.com.vn/c20s170/skphapluat/trang- 1.htm'); // duyệt nội dung của trang phapluat gán vào biến $crawler $pattern='/href="([^"]*)/is'; // biểu thức chính quy lấy ra các siêu liên kết preg_match_all($pattern ,$crawler,$matches);

print_r($matches[1]); ?>

43

Tiếp theo để lọc ra các URL bài viết trong danh mục pháp luật ta sẽ xử dụng các hàm tìm kiếm chuỗi trong PHP.

Ví dụ :

$result = array_unique($matches[1]); // đưa kết quả vào mảng unique foreach ($result as $url){ // duyệt từng phần tử

$find1= '.htm';

$find2= 's170'; // s170 là mã category

if ((strpos($link,$find1)==true) //lọc ra chuỗi có chứa chuỗi .htm &&(strpos($link,$find2)==true)) { //lọc ra chuỗi có chứa chuỗi s170 $content=file_get_contents('http://dantri.com.vn'.$url);

echo $content.'<hr>'; // in ra nội dung URL bài viết }

}

Bước 2: Bóc tách nội dung bài viết

Trước khi bóc tách thơng tin ta sẽ sử dụng firebug – một add-ons của firefox, để xác

định các phần tử của trang web thơng qua mơ hình thẻ tag dạng cây.

Thơng tin của một bài viết sẽ được bóc tách bằng cách sử dụng biểu thức chính quy và các hàm xử lý chuỗi trong PHP. Một bài viết sẽ được chia thành các trường thông tin

44

bao gồm : tiêu đề bài viết, giới thiệu bài viết, ảnh trong bài viết, nội dung bài viết, thời gian đăng bài viết và mã category tương ứng. Toàn bộ nội dung bài viết sau khi bóc

tách xong sẽ được lưu vào cơ sở dữ liệu.

Sau đây là một ví dụ việc bóc tách nội dung một bài viết bất kỳ trên Dân trí lấy

ra trường date time:

$link=”...” ; //$link là một URL bài viết bất kỳ $crawler=file_get_contents("$link");

//duyệt nội dung của bài viết gán vào biến content $pattern = '/<div\sclass="neo-dtdate">(.*?)<\/div>/is';

// biểu thức chính quy lấy ra thời gian đăng bài viết preg_match_all($pattern ,$crawler,$matches);

foreach ($matches[1] as $date) {

echo "<b><h4>".$date."</h4></b>" ; // in ra kết quả }

2.3.2.1.2. Nhận xét

Cách làm này có một số nhược điểm như sau: - Tốc độ thu thập chậm

Tốc độ thu thập chậm do phải duyệt nội dung hai lần. Lần đầu tiên là phải duyệt nội dung chuyên mục để lấy ra các URL bài viết, lần thứ hai là phải duyệt nội dung các bài viết để lấy ra các trường thông tin.

- Cơ sở dữ liệu quá lớn

Cơ sở dữ liệu lớn do phải lưu toàn bộ nội dung bài viết. Ta thử tưởng tượng chỉ với trang Dân trí đã có tới gần 400 nghìn bài viết, để lưu trữ cũng cần vài Gigabyte cơ sở dữ liệu. Việc lưu trữ này sẽ vô cùng vất vả khi ta muốn tổng hợp thêm tin tức từ nhiều trang báo điện tử khác nhau. Vì là trang web tổng hợp thông tin nên nếu chỉ lấy nội dung từ một trang Dân trí thì khơng khả thi, trang web phải có khả năng tổng hợp thơng tin từ nhiều nguồn thì mới có giá trị thương mại.

45

- Ngoài hai nhược điểm quan trọng kể trên thì cịn một số nhược điểm khác

trong q trình hiển thị bài viết. Ví dụ như trong một bài viết có thể có nhiều ảnh đặc biệt là những bài phóng sự qua ảnh, khi đó cần cơ chế chung để chọn ra một ảnh đại

diện để hiển thị ở phần mô tả bài viết. Mà các cơ chế này là khác nhau tùy vào từng trang báo. Do đó phần mơ tả bài viết trong trang web tổng hợp thông tin sẽ không đảm bảo được tính tồn vẹn so với bài viết ở trang gốc.

Trong quá trình xây dựng trang web tôi đã nhận ra được các nhược điểm trong cách làm này, vì thế tơi đã tìm ra cách làm mới. Cách làm này có tốc độ thu thập nhanh hơn, cơ sở dữ liệu gọn nhẹ và đảm bảo được tính tồn vẹn của bài viết.

2.3.2.2. Cách làm mới

2.3.2.2.1. Các bước thực hiện

Quá trình thu thập bài viết được thực hiện qua các bước: Bước 1: Thu thập và bóc tách nội dung phần mơ tả bài viết

Phần mô tả bài viết được minh họa ở hình 11. Trong phần này chúng ta sẽ thu thập

các phần mô tả bài viết ứng với từng chuyên mục. Để làm được điều này ta cũng dùng hàm preg_math giống như cách làm truyền thống, trong đó $pattern là biểu thức chính quy để lấy ra phần mơ tả. Sau đó ta sẽ thực hiện việc bóc tách nội dung phần mơ tả để lấy ra các trường thông tin bao gồm : tiêu đề bài viết, giới thiệu bài viết, ảnh đại diện, URL bài viết. Trong URL bài viết ta lại lấy ra các trường: mã bài viết, mã chuyên mục, đường dẫn chuyên mục sau đó lưu tất cả vào cơ sở dữ liệu.

Sau đây là đoạn mã chương trình minh họa trình thu thập thực hiện việc thu thập phần mô tả bài viết:

function crawler($url){

$crawler = file_get_contents($url); // duyệt nội dung của trang ứng với url $pattern = '/<div\sclass=\"cat-headline\sclearfix\">(.*?)Xem\stiếp<\/a>/is';

//biểu thức chính quy lấy ra phần mô tả

preg_match_all($pattern ,$crawler,$matches); //kỹ thuật so trùng để lấy kết quả foreach ($matches[1] as $link){

46

$find1= '.htm'; // tìm kiếm chuỗi có đi htm if (strpos($link,$find1)==true)

{

add_into_db($link); // gọi hàm bóc tách nội dung }

} }

Bước 2: Hiển thị nội dung bài viết

Sau khi đã lấy được nội dung các phần mô tả và lưu vào cơ sở dữ liệu, lúc này ta sẽ thực hiện bước hiển thị nội dung ra trang web. Vì phần mơ tả bài viết được lấy hoàn

toàn từ trang gốc nên ta chỉ quan tâm đến việc hiển thị nội dung các bài viết. Do nội dung các bài viết không được lưu trong cơ sở dữ liệu nên khi ấn vào một đường dẫn bài viết thay vì lấy nội dung từ cơ sở dữ liệu ta sẽ gọi hàm bóc tách nội dung bài viết. Hàm bóc tách nội dung bài viết được xây dựng giống như trong cách làm truyền

thống. Ý tưởng sáng tạo ở đây là: Trình thu thập lúc này khơng cần phải thu thập mà chỉ có nhiệm vụ bóc tách nội dung bài viết mà tốc độ bóc tách một bài viết của trình thu thập là rất nhanh nên ta không cần lưu vào cơ sở dữ liệu.

2.3.2.2.2. Nhận xét

Cách làm mới có một số ưu điểm sau:

- Tốc độ thu thập nhanh hơn đáng kể

Tốc độ thu thập nhanh do hai lý do: thứ nhất là trình thu thập chỉ phải duyệt nội dung một lần (duyệt nội dung category) và thứ hai là lượng dữ liệu thu thập ít hơn nhiều. - Cơ sở dữ liệu gọn nhẹ

Cơ sở dữ liệu giảm khoảng hơn 10 lần do không phải lưu nội dung các bài viết, kiểm thử bằng cách thu thập 15000 bài viết, ở cách làm truyền thống cơ sở dữ liệu là hơn

100Mb trong khi cách làm này cơ sở dữ liệu chỉ có 9Mb. - Đảm bảo tính tồn vẹn cho tài liệu gốc

Phần mô tả bài viết và phần nội dung bài viết mới là giống với bài viết gốc do đó đảm bảo được tính tồn vẹn của bài viết gốc.

47

2.4. THIẾT KẾ

Một số đặc điểm của website:

- Website được viết bằng ngơn ngữ lập trình PHP tương tác với cơ sở dữ liệu MySQL.

- Website là một trang web tích cực.

- Website thực hiện việc thu thập bài viết từ trang báo điện tử lớn là Dân trí (http://dantri.com.vn). Tên các chuyên mục được lấy giống như trang Dân trí. Q

trình thu thập và bóc tách bài viết là tự động.

- Thuật toán sử dụng để thu thập dữ liệu là thuật tốn tìm kiếm theo chiều rộng. - Phần chuyên mục (category) của website được viết bằng ajax nên có độ tùy biến cao.

2.4.1. Cấu trúc cơ sở dữ liệu 2.4.1.1. Danh sách các bảng 2.4.1.1. Danh sách các bảng

STT Tên tả

1 category Bảng các category

2 news Bảng nội dung các bài viết được thu thập

2.4.1.2. Chi tiết các bảng

48

STT Thuộc tính Kiểu Miền giá trị Ghi chú

1 cate_id int 11 Khóa chính 2 cate_name varchar 30

3 cate_code varchar 11 Quan hệ với bảng news 4 cate_path varchar 30

5 cate_parent int 11

- Ý nghĩa của các thuộc tính:

+ cate_id: Số thự tự của category trong bảng category, tự động tăng dần + cate_name: Tên của category

+ cate_code: Mã của category

+ cate_path: Đường dẫn tương đối của category + cate_parent: Số category cha

- Bảng news trong cấu trúc cơ sở dữ liệu

STT Thuộc tính Kiểu Miền giá trị Ghi chú

1 news_id int 11 Khóa chính 2 news_title varchar 1000

3 news_img text 1000 4 news_link varchar 1000 5 news_intro text

6 news_num varchar double 7 cate_code varchar 11

49

- Ý nghĩa các thuộc tính:

+ news_id: Số thự tự của bài viết trong bảng news, tự động tăng dần + news_title: Tiêu đề của bài viết

+ news_img: Đường dẫn ảnh trong bài viết + news_link: Đường dẫn của bài viết + news_intro: Phần giới thiệu của bài viết + news_num: Mã bài viết

2.4.2. Phần quản trị cơ sở dữ liệu

Phần quản trị cơ sở dữ liệu được thiết kế trực quan, rất dễ sử dụng. Người dùng có thể lựa chọn thu thập bài viết từ một hoặc nhiều chủ đề, cũng có thể chọn chủ đề

mình thích hoặc lựa chọn thu thập tất cả các chủ đề. Đây là giao diện chính của phần quản trị:

Một phần của tài liệu Luận văn:Tìm hiểu về trình thu thập web và xây dựng trang web tổng hợp thông tin doc (Trang 48 - 56)

Tải bản đầy đủ (PDF)

(60 trang)