Trong những năm gần đây, sự phát triển vượt bậc của công nghệ thông tin đã làm tăng số lượng giao dịch thông tin trên mạng Internet một cách đáng kể đặc biệt là thư viện điện tử, tin tức điện tử. Do đó thông tin, tin tức xuất hiện trên mạng Internet cũng tăng theo với một tốc độ chóng mặt và liên tục có sự thay đổi.Với lượng thông tin đồ sộ như vậy, một yêu cầu lớn đặt ra đối với chúng ta là làm sao tổ chức và tìm kiếm thông tin có lợi và hiệu quả nhất. Việc thu thập, phân loại và trích xuất thông tin thông qua các website khác nhau hiện nay đang có nhu cầu rất lớn. Nhưng một thực tế là khối lượng thông tin quá lớn, việc thu thập và phân loại dữ liệu thủ công là điều rất khó khăn và phức tạp. Hướng giải quyết là xây dựng một hệ thống website cho phép thu thập và phân loại các thông tin trên. Việc tổng hợp thông tin từ nhiều nguồn khác nhau cung cấp cho người dùng cái nhìn tổng quát, đa chiều về thông tin mà người dùng quan tâm. Nhằm tìm hiểu và xây dựng các quá trình tìm kiếm rút trích, bóc tách thông tin từ nhiều trang web khác nhau. Qua đó xây dựng một website thông tin để thu thập, đánh giá thông tin tự động trên Internet phục vụ cho người đọc có thể nắm bắt được thông tin một cách dễ dàng, nhanh chóng và tiết kiệm thời gian. Chính vì vậy em chọn đề tài “Xây dựng website lọc, trích thông tin từ nhiều nguồn”.
Trang 1LỜI CẢM ƠN
Trong suốt thời gian nghiên cứu khóa luận này, ngoài sự nỗ lực của bảnthân, em còn nhận được sự giúp đỡ, chỉ bảo tận tình của các thầy giáo, cô giáotrong khoa Toán – Công Nghệ, trường Đại Học Hùng Vương
Đặc biệt, em xin bày tỏ lòng biết ơn sâu sắc tới thầy giáo, Th.S ĐinhThái Sơn- giảng viên trường Đại Học Hùng Vương Thầy đã giành nhiều thờigian quý báu tận tình hướng dẫn em trong suốt quá trình thực hiện khóa luậnnày, đồng thời, thầy còn là người giúp em lĩnh hội được nhiều kiến thứcchuyên môn và rèn luyện cho em tác phong nghiên cứu đề tài
Qua đây em xin gửi lời cảm ơn chân thành và sâu sắc tới các thầy giáo
cô giáo trong khoa Toán - Công Nghệ đã nhiệt tình giúp đỡ em trong suốt quátrình học tập cũng như khi em thực hiện và hoàn thiện khóa luận này
Mặc dù đã rất cố gắng song khóa luận của em không tránh khỏi nhữngthiếu sót Vì vậy em rất mong nhận được sự góp ý của các thầy giáo, cô giáo
và các bạn để khóa luận được hoàn thiện hơn
Em xin chân thành cảm ơn!
Việt Trì, Tháng 5 năm 2014 Sinh viên
Hà Thị Như Quỳnh
Trang 2MỤC LỤC
Trang 3DANH MỤC VIẾT TẮT
API (Application Programming
Interface) Giao diện lập trình ứng dụng CSS ( Cascading Style Sheets) Tập tin định kiểu theo tầng
HTML ( HyperText Markup Language) Ngôn ngữ đánh dấu siêu văn bản
HTTP (HyperText Transfer Protocol ) Giao thức truyền tải siêu văn bản
URL ( Uniform Resource Locator ) Địa chỉ Website
XML ( EXtensible Markup Language) Ngôn ngữ đánh dấu mở rộng
XHTML ( Extensible HyperText Markup
Language)
Ngôn ngữ đánh dấu siêu văn bản
mở rộng
Trang 4DANH MỤC BẢNG BIỂU
Trang 5DANH MỤC HÌNH ẢNH
Trang 6MỞ ĐẦU
1. Lý do chọn đề tài khóa luận
Trong những năm gần đây, sự phát triển vượt bậc của công nghệ thôngtin đã làm tăng số lượng giao dịch thông tin trên mạng Internet một cách đáng
kể đặc biệt là thư viện điện tử, tin tức điện tử Do đó thông tin, tin tức xuấthiện trên mạng Internet cũng tăng theo với một tốc độ chóng mặt và liên tục
có sự thay đổi
Với lượng thông tin đồ sộ như vậy, một yêu cầu lớn đặt ra đối với chúng
ta là làm sao tổ chức và tìm kiếm thông tin có lợi và hiệu quả nhất Việc thuthập, phân loại và trích xuất thông tin thông qua các website khác nhau hiệnnay đang có nhu cầu rất lớn Nhưng một thực tế là khối lượng thông tin quálớn, việc thu thập và phân loại dữ liệu thủ công là điều rất khó khăn vàphức tạp Hướng giải quyết là xây dựng một hệ thống website cho phép thuthập và phân loại các thông tin trên
Việc tổng hợp thông tin từ nhiều nguồn khác nhau cung cấp cho ngườidùng cái nhìn tổng quát, đa chiều về thông tin mà người dùng quan tâm.Nhằm tìm hiểu và xây dựng các quá trình tìm kiếm rút trích, bóc tách thôngtin từ nhiều trang web khác nhau Qua đó xây dựng một website thông tin đểthu thập, đánh giá thông tin tự động trên Internet phục vụ cho người đọc cóthể nắm bắt được thông tin một cách dễ dàng, nhanh chóng và tiết kiệm thờigian
Chính vì vậy em chọn đề tài “Xây dựng website lọc, trích thông tin từ
nhiều nguồn”.
2. Mục tiêu khóa luận
Mục tiêu của khóa luận nhằm tìm hiểu và nghiên cứu cách thức, quátrình rút trích và bóc tách thông tin tự động từ nội dung của các website trêninternet qua đó xây dựng một website tổng hợp thông tin
3. Nhiệm vụ nghiên cứu
Trang 7Sưu tập các tài liệu, giáo trình liên quan đến trình thu thập web, cácphương pháp bóc tách dữ liệu, các kỹ thuật lấy trang tin, để xây dựng websitetổng hợp tin tức từ nhiều nguồn.
4. Phương pháp nghiên cứu
• Phương pháp nghiên cứu lý luận: Đọc và nghiên cứu tài liệu, giáo trình
có liên quan đến mã nguồn rồi phân hóa, hệ thống hóa các kiến thức
• Phương pháp tổng kết kinh nghiệm: Qua việc nghiên cứu, tham khảotài liệu, giáo trình từ đó rút ra kinh nghiệm để áp dụng vào việc nghiêncứu
• Phương pháp lấy ý kiến chuyên gia: Lấy ý kiến của giảng viên trực tiếphướng dẫn, các giảng viên khác để hoàn thiện về mặt nội dung và hìnhthức của khóa luận
5. Đối tượng và phạm vi nghiên cứu
• Đối tượng: Nghiên cứu về trình thu thập web, các phương pháp bóctách dữ liệu, các kỹ thuật lấy trang tin
• Phạm vi: Xây dựng website tổng hợp tin tức từ nhiều nguồn
6. Ý nghĩa khoa học
Qua nghiên cứu đề tài đã bước đầu đề cập đến các giải pháp kỹ thuậttrong thu thập thông tin tự động trên internet, phục vụ cho việc phân tíchthông tin thu thập được theo lĩnh vực, chủ đề khác nhau nhằm giúp cho ngườidùng theo dõi thông tin một cách thuận tiện, dễ dàng
Đề tài nghiên cứu giúp sinh viên có khả năng thực hành tốt hơn khi xâydựng website Mặt khác, đề tài là tài liệu tham khảo dành cho các bạn sinhviên và các thầy cô quan tâm đến vấn đề này
7. Bố cục của khóa luận
Ngoài phần mở đầu, kết luận, tài liệu tham khảo, khóa luận được chiathành các chương
Chương 1: Tổng quan về kỹ thuật bóc tách thông tin
Chương 2: Thiết kế hệ thống website
Trang 8Chương 3: Xây dựng phần mềm
Trang 9CHƯƠNG 1 TỔNG QUAN VỀ KỸ THUẬT BÓC TÁCH THÔNG TIN
1.1 Giới thiệu về trình thu thập web
Trình thu thập web (Web crawler) là một chương trình khai thác cấu trúc
đồ thị của web di chuyển từ trang này qua trang khác Thời kỳ đầu nó cónhững tên khá tượng hình như bọ web, rô-bốt, nhện và sâu, nhưng ngày naytên gọi phổ biến nhất là vẫn là trình thu thập web Mặc dù vậy cụm từ “thuthập” không lột tả được hết tốc độ của những chương trình này, vì chúng cótốc độ làm việc đáng kinh ngạc, có thể thu thập dữ liệu lên đến hàng chụcngàn trang trong vòng một vài phút
Từ thời kỳ đầu, một động lực quan trọng thúc đẩy quá trình phát triểncủa việc thiết kế trình thu thập web là lấy được nội dung các trang web vàthêm chúng hoặc đường dẫn của chúng vào một kho lưu trữ trang – một kiểukho lưu trữ có thể dùng để phục vụ cho các ứng dụng cụ thể trong công cụ tìmkiếm web (search engine)
Các trình thu thập thường bắt đầu bằng cách chọn một số các đường dẫn(URL) ứng với các trang web sẽ ghé thăm đầu tiên, các trang này được gọi làcác trang hạt giống
Quá trình này chỉ dừng lại khi trình thu thập đã thu thập đủ số trang yêucầu hoặc frontier là rỗng, tức là không còn URL để duyệt Tuy mô tả này có
vẻ đơn giản nhưng đằng sau chúng là khá nhiều vấn đề hóc búa liên quan đếnkết nối mạng, bẫy nhện, tiêu chuẩn trích xuất URL, chuẩn hóa các trangHTML, bóc tách nội dung trang HTML vv
Sau khi đã có được một danh sách các URL dùng cho việc thu thập, ta sẽthực hiện quá trình lấy trang Tất cả các trang được lấy một lần và được lưuvào một kho lưu trữ giống như cơ sở dữ liệu của công cụ tìm kiếm, đến đâykhông cần thu thập thêm Tuy nhiên web là một thực thể năng động với cáckhông gian con liên tục phát triển và thay đổi nhanh một cách chóng mặt, vì
Trang 10thế thông tin phải liên tục được thu thập để giúp các ứng dụng luôn cập nhật,
ví dụ như bổ sung các trang mới loại bỏ các trang đã bị xóa, di chuyển hoặccập nhật các trang bị sửa đổi
Các trang web chủ yếu được viết bằng các ngôn ngữ đánh dấu nhưHTML, XHTML và được nhắm đến đối tượng sử dụng là con người chứkhông phải máy tính
Các trang web lại chứa đựng nhiều thông tin có ích mà con người có thểmuốn thu thập và lưu trữ lại, chính vì thế mà cần phải có những kỹ thuật bóctách và trích xuất thông tin theo một cơ chế tự động Các kỹ thuật bóc tách dữliệu (parsing) có thể ở mức đơn giản như việc bóc tách các siêu liên kết, hoặc
ở mức phức tạp hơn một chút là bóc tách bất kỳ phần nội dung nào trong mộttrang web
Về bản chất, quá trình thu thập web chính là quá trình duyệt đệ quy một
đồ thị Các web được xem như một đồ thị với các trang là các đỉnh (node) vàcác siêu liên kết là các cạnh Quá trình lấy trang và trích xuất các liên kết bêntrong nó tương tự như việc mở rộng tìm kiếm một đỉnh trong đồ thị Trình thuthập sử dụng kỹ thuật tìm kiếm khác nhau sẽ cho kết quả tìm kiếm khác nhau,
so sánh hiệu suất của các kỹ thuật tìm kiếm này từ đó rút ra đánh giá về hiệusuất của các trình thu thập
Trình thu thập web là thành phần đầu tiên trong toàn bộ hệ thống searchengine Mục đích của các hệ thống search engine là số lượng trang web đầuvào đạt giá trị cao nhất có thể, trong đó trình thu thập web làm công việcchính là duy trì cơ sở dữ liệu được đánh chỉ mục, trả về giá trị của bộ thu thập
và bộ lập chỉ mục cho hàng triệu truy vấn nhận được từ người dùng Các trangđược đánh chỉ mục dựa trên các thuật toán ưu tiên hoặc các phương pháp dựatrên kinh nghiệm (heuristic) Ngoài ra, chúng ta có thể sử dụng trình thu thậpweb để xây dựng các phần mềm tập trung thông tin, các trang web tổng hợpthông tin, dựa trên cơ chế tự động tìm và phát hiện tài nguyên
Trang 111.2 Cách xây dựng một hạ tầng thu thập web
Trình thu thập chứa một danh sách các URL chưa được thăm gọi là biêngiới frontier Danh sách được khởi tạo bởi một số các URL hạt giống - cácURL này được cung cấp bởi một người dùng hoặc một chương trình khác.Mỗi vòng lặp là một quá trình gồm các bước:
- Lấy một URL tiếp theo từ frontier ra để thu thập
- Lấy trang tương ứng với URL thông qua HTTP
- Bóc tách trang vừa lấy để trích xuất ra các URL và các nội dung thông tin cụthể
- Cuối cùng là thêm các URL chưa thăm vào frontier
Trước khi các URL được thêm vào frontier chúng có thể được đánh chỉmục dựa trên số lượng truy cập vào trang web ứng với URL Quá trình thuthập sẽ chấm dứt ngay khi trình thu thập đạt đủ số lượng trang nhất định hoặcfrontier rỗng, đây được gọi là trạng thái kết thúc (dead-end) của trình thuthập
ít quan trọng và giữ lại các URL ứng với các trang quan trọng Lưu ý rằng tốc
độ thêm các URL vào frontier nhanh gần bằng tốc độ thu thập thông tin Nó
có thể thêm tới 60000 URL ngay khi trình thu thập thu thập dữ liệu của 60000trang, giả định trung bình mỗi trang có khoảng 7 liên kết
Frontier có thể coi như một hàng đợi làm việc theo cơ chế FIFO (First InFirst Out) nghĩa là vào trước ra trước trong trường hợp chúng ta sử dụng thuật
Trang 12toán tìm kiếm theo chiều rộng để thu thập thông tin Trình thu thập sử dụng
kỹ thuật tìm kiếm này gọi là trình thu thập theo chiều rộng Các URL được lấy
ra thu thập được chọn từ trên xuống dưới trong danh sách và các URL mớiđược thêm vào đuôi của danh sách Do miền giới hạn của frontier, ta phải đảmbảo các URL chỉ được lấy một lần Để tìm kiếm xem một URL mới đượctrích xuất đã có trong danh sách chưa là khá phức tạp vì số lượng trang là rấtlớn mỗi lần tìm kiếm là một lần chạy vòng for điều này là khá bất cập Vì vậy
có một giải pháp là sử dụng một phần bộ nhớ để duy trì một hàm băm vớiURL là khóa Hàm băm này sẽ sinh ra các giá trị băm tương ứng với mỗiURL Sở dĩ sử dụng hàm băm sẽ tìm kiếm nhanh hơn vì việc so sánh các giátrị băm nhanh hơn nhiều việc so sánh một giá trị với một khối dữ liệu lớn.Hiện nay do bộ nhớ máy tính là rất lớn nên vấn đề về bộ nhớ là khôngmấy quan trọng so với vấn đề về tốc độ Do vậy, cách sử dụng hàm băm được
sử dụng rộng rãi, mặc dù là tốn bộ nhớ hơn nhưng tốc độ tìm kiếm lại đượccải thiện đáng kể
Khi frontier đạt đến miền giới hạn, thì các trình thu thập theo chiều rộng
sẽ làm việc theo cơ chế sau: sau khi đưa một URL ra khỏi frontier để tiếnhành quá trình thu thập trang tương ứng thay vì việc lấy tất cả URL trongtrang này trình thu thập sẽ chỉ lấy URL chưa thăm đầu tiên và thêm vàofrontier
Frontier có thể coi như một hàng đợi ưu tiên trong trường hợp chúng ta
sử dụng thuật toán tìm kiếm theo lựa chọn tốt nhất Trình thu thập sử dụng kỹthuật tìm kiếm này gọi là trình thu thập ưu tiên Hàng đợi ưu tiên là một mảngvới các phần tử là các URL được sắp xếp theo điểm đánh giá
Trình thu thập ưu tiên sẽ làm việc theo cơ chế sau: URL được lấy ra khỏifrontier để tiến hành thu thập luôn là URL tốt nhất Sau khi thu thập trangtương ứng, các URL được trích xuất ra, được đưa vào frontier và các danhsách URL được sắp xếp lại theo điểm đánh giá Để tránh việc trùng lặp URL
Trang 13chúng ta cũng duy trì một hàm băm với các khóa là URL để tra cứu.
Khi frontier đạt đến miền giới hạn, cơ chế làm việc của trình thu thập tối
ưu cũng giống với trình thu thập theo chiều rộng chỉ khác là các URL đượclấy là các URL tốt nhất (tức là URL có điểm đánh giá cao nhất)
Trong trường hợp trình thu thập nhận thấy frontier là danh sách rỗng(không thể lấy ra các URL tiếp theo để thu thập) thì quá trình thu thập sẽ kếtthúc Tuy vậy trường hợp rất hiếm xảy ra vì với một số URL hạt giống vàmiền giới hạn khá lớn frontier hiếm khi đạt trạng thái rỗng
1.4 Lược sử và kho lưu trữ trang
Lược sử thu thập dữ liệu là một danh sách đánh dấu theo thời gian cácURL được lấy bởi trình thu thập Một URL được đưa vào lược sử chỉ sau khi
đã trả về các URL bên trong nó Lược sử có thể sử dụng để phân tích và đánhgiá thông tin Lược sử được lưu trữ nhằm cung cấp cho một tra cứu nhanh đểkiểm tra xem một trang đã được thăm hay chưa Kiểm tra này là khá quantrọng nhằm tránh các trang bị thăm lại và tránh thêm việc thu thập lại cáctrang này Do kích thước của frontier có hạn và bộ nhớ của máy tính hiện nay
là vô cùng lớn nên việc duy trì một lược sử cần thiết nhằm nâng cao hiệu quảhoạt động của trình thu thập Một điều cần chú ý là phải chuẩn hóa URL trướckhi đưa vào lược sử
Khi một trang được lấy nó phải được lưu trữ và lập chỉ mục nhằm mụcđích phục vụ cho các ứng dụng sau này (chẳng hạn như công cụ tìm kiếm).Đây là công việc mà một kho lưu trữ trang phải làm Một kho lưu trữ trang ởdạng đơn giản sẽ chứa các trang thu thập theo từng file riêng biệt Trongtrường hợp đó, mỗi trang phải đặt trong một tệp tin duy nhất Một cách để làmđiều này là đặt mỗi trang URL tương ứng với một chuỗi sau đó sử dụng mộtvài dạng của hàm băm với xác suất xung đột thấp để mã hóa Giá trị kết quảcủa hàm băm được sử dụng làm tên của tập tin Bằng cách này chúng ta có độdài tên tập tin luôn cố định cho dù có bao nhiêu URL đi nữa Tất nhiên nếu
Trang 14chỉ cần lưu trữ vài nghìn trang thì ta có thể sử dụng một hàm băm đơn giảnhơn Trong một số trường hợp các kho lưu trữ trang cũng có thể dùng để kiểmtra xem một URL đã được thu thập hay chưa trước khi chuyển đổi sang têntập tin 32 ký tự Trong những trường hợp này có thể bỏ đi cấu trúc dữ liệulược sử.
1.5 Cách lấy trang
Để lấy một trang web, chúng ta cần một máy khách HTTP (HTTP client)gửi một yêu cầu HTTP (HTTP request) cho trang đó và đọc các phản hồi.Client cần có thời gian trễ để đảm bảo rằng không bị mất thời gian không cầnthiết vào các máy chủ chậm hoặc đọc các trang lớn Trong thực tế chúng tathường hạn chế vấn đề này bằng cách cho client tải về khoảng 10-20 KB đầutiên của trang Client cần bóc tách được tiêu đề phản hồi cho các mã trạng thái
và chuyển hướng
Kiểm tra lỗi và xử lý ngoài luồng là rất quan trọng trong quá trình lấytrang vì chúng ta phải đối phó với hàng triệu máy chủ Trong quá trình lấytrang, trình thu thập không thể tự quyết định tài liệu nào được lập chỉ mục vàtài liệu nào không, do đó nó lấy tất cả những gì có thể Thậm chí dù xác địnhđược tài liệu vô ích thì nó cũng đã bỏ ra một chi phí đáng kể cho hoạt độngthu thập
1.6 Bóc tách trang
Khi một trang đã được lấy, chúng ta cần phân tích nội dung của nó đểtrích xuất thông tin, lấy ra các URL để mở ra hướng đi tiếp theo của các trìnhthu thập
Phân tích nội dung có thể là quá trình khai thác hyperlink/URL đơn giảnhoặc nó có thể bao gồm quá trình phức tạp hơn như lọc nội dung HTML đểphân tích thành mô hình thẻ HTML dạng cây (HTML tag tree) Phân tích nộidung cũng có thể bao gồm các bước chuyển đổi URL được trích xuất thànhdạng tiêu chuẩn, loại bỏ những từ ở phần đầu nội dung của trang và lấy các từ
Trang 15còn lại ở phần thân.
• Tiêu chuẩn trích xuất URL
Hàm bóc tách HTML có sẵn cho nhiều ngôn ngữ khác nhau Chúng cungcấp các chức năng để dễ dàng xác định các tag HTML và cặp các giá trị thuộctính liên quan trong một tài liệu HTML Để trích xuất siêu liên kết URL từmột trang Web, chúng ta có thể sử dụng các hàm bóc tách để tìm thẻ anchor
(thẻ <a>) và lấy các giá trị các thuộc tính href liên quan Trước tiên chúng ta
phải chuyển đổi tất cả các đường dẫn URL sang đường dẫn URL tuyệt đối vì
có nhiều đường dẫn URL viết không đúng quy chuẩn có thể cùng dẫn tới mộttrang Điều này là quan trọng để tránh lấy một trang nhiều lần Dưới đây làmột số bước điển hình được sử dụng trong thủ tục chuẩn hóa URL:
- Chuyển đổi giao thức và tên máy chủ thành dạng chữ thường
- Loại bỏ phần “tham khảo” trong URL
- Thực hiện mã hóa URL cho một vài những ký tự thường sử dụng như ’~’.Điều này sẽ tránh được việc thu thập lại 1 trang
- Đối với một vài URL, thêm ký tự ‘/’
- Sử dụng để nhận ra các trang web mặc định Những tên file như index.htmlhoặc index.htm có thể được loại bỏ trong đường dẫn URL với thừa nhận rằng
đó là những trang mặc định
- Loại bỏ ‘ ’ và đường dẫn trước nó trong phần URL
Điều quan trọng là đảm bảo tính nhất quán trong khi áp dụng các luậtchuẩn hóa Có thể hai luật khác nhau lại cho kết quả tốt như nhau miễn là ta
áp dụng các luật chuẩn hóa URL một cách nhất quán
• Mô hình thẻ HTML dạng cây
Các trình thu thập có thể lấy ra giá trị của các URL hoặc một nội dungbất kỳ trong một trang web bằng cách kiểm tra phạm vi thẻ tag HTML chứachúng Để làm được điều này, trình thu thập có thể sử dụng mô hình thẻHTML dạng cây và phân tích cấu trúc DOM (Document Oject Model) của môhình này Phân tích cấu trúc DOM giúp trình thu thập có thể duyệt các node
Trang 16trên cây này và chỉ lấy ra phần nội dung mà nó cần Hình dưới đây cho ta thấymột mô hình cây tương ứng với một mã nguồn URL
Hình 1.1 Mô hình cây tương ứng với một mã nguồn HTML
Có thể thấy thẻ <html> là gốc của cây, các thẻ bên trong nó là các node
mở rộng, và dữ liệu text là lá của cây
Trên thực tế, không phải văn bản HTML nào cũng được viết đúng quychuẩn như ví dụ trên HTML là ngôn ngữ không phân biệt chữ hoa hay chữthường (hai thẻ <tr> và <TR> đều là một) Các phần tử HTML cần có một thẻ
mở và một thẻ đóng, tuy nhiên điều này không phải luôn luôn đúng, có nhiềuphần tử không cần thẻ đóng, ví dụ các thẻ <br>, <hr> và <li> Ngoài ra khilồng nhau, các phần tử HTML cũng không cần thiết phải lồng nhau theo đúngthứ tự (tức là thẻ nào mở trước thì phải đóng sau)
Trang 17Vì vậy trước khi lập mô hình cây cho một mã nguồn HTML chúng ta cầnmột quá trình chuyển đổi các tài liệu HTML ban đầu thành các tài liệu HTMLtiêu chuẩn, quá trình này gọi là chuẩn hóa các trang HTML Quá trình nàybao gồm việc chuyển đổi các thẻ sang dạng chữ thường, chèn thêm các thẻ vàsắp xếp lại thứ tự các thẻ trong tài liệu HTML Chuẩn hóa trang HTML là rấtcần thiết để việc lập mô hình cây được chính xác Nếu như trình thu thập chỉcần lấy các liên kết hoặc văn bản hoặc một phần văn bản thì có thể ta khôngcần sử dụng tới mô hình cây mà chỉ cần sử dụng kỹ thuật bóc tách HTML đơngiản Trình bóc tách như vậy cũng được hỗ trợ trong nhiều ngôn ngữ lập trình.
1.7 Các kỹ thuật thu thập web
Trong phần này chúng ta sẽ thảo luận về một số kỹ thuật thu thập dữ liệubao gồm:
- Kỹ thuật thu thập dữ liệu theo chiều sâu
- Kỹ thuật thu thập dữ liệu theo chiều rộng
- Kỹ thuật thu thập dữ liệu theo ngẫu nhiên
Như đã nói ở phần trước về bản chất, quá trình thu thập web chính là quátrình duyệt đệ quy một đồ thị Các web được xem như một đồ thị với cáctrang là các đỉnh (node) và các siêu liên kết là các cạnh Chính vì thế các kỹthuật thu thập dữ liệu cũng được xây dựng dựa trên các thuật toán tìm kiếmtrên đồ thị Các thuật toán tìm kiếm trên đồ thị bao gồm:
- Tìm kiếm theo chiều sâu (Depth-First Search): Là thuật toán tìm kiếmbằng cách mở rộng nút đồ thị theo chiều sâu
- Tìm kiếm theo chiều rộng (Breath-First Search): Là thuật toán tìmkiếm bằng cách mở rộng nút đồ thị theo chiều rộng
- Tìm kiếm theo lựa chọn tốt nhất (Best-First Search): Là một thuật toántìm kiếm tối ưu bằng cách mở rộng nút hứa hẹn nhất theo một quy tắc nào đó
1.7.1 Kỹ thuật thu thập dữ liệu theo chiều sâu
Quá trình thực hiện:
Trang 18Bước 1: Lấy URL đầu tiên trong danh sách (frontier) để thu thập.
- Nếu có qua bước 2
- Nếu không qua bước 5
Bước 2: Lấy trang tương ứng với URL qua HTTP
- Nếu có qua bước 3
- Nếu không quay lại bước 1
Bước 3: Kiểm tra xem trang này đã được được thăm chưa?
- Nếu chưa qua bước 4
- Nếu rồi quay lại bước 1
Bước 4: Đánh dấu trang này đã được thăm Bóc tách trang và tìm cácliên kết có trong trang này
- Nếu có, thêm các liên kết vào đầu danh sách Quay lại bước 3
- Nếu không, quay lại bước 1
Bước 5: Kết thúc
1.7.2 Kỹ thuật thu thập dữ liệu theo chiều rộng
Quá trình thực hiện:
Bước 1: Lấy URL đầu tiên trong danh sách để thu thập
- Nếu có qua bước 2
- Nếu không qua bước 5
Bước 2: Lấy trang tương ứng với URL qua HTTP
- Nếu có qua bước 3
- Nếu không quay lại bước 1
Bước 3: Kiểm tra xem trang này đã được được thăm chưa?
- Nếu chưa qua bước 4
- Nếu rồi quay lại bước 1
Bước 4: Đánh dấu trang này đã được thăm Bóc tách trang và tìm cácliên kết có trong trang này
- Nếu có, thêm các liên kết vào cuối danh sách Quay lại bước 3
Trang 19- Nếu không, quay lại bước 1.
Bước 5: Kết thúc
1.7.3 Kỹ thuật thu thập dữ liệu ngẫu nhiên
Bước 1: Lấy URL ngẫu nhiên trong danh sách để thu thập
- Nếu có qua bước 2
- Nếu không qua bước 5
Bước 2: Lấy trang tương ứng với URL qua HTTP
- Nếu có qua bước 3
- Nếu không quay lại bước 1
Bước 3: Kiểm tra xem trang này đã được được thăm chưa?
- Nếu chưa qua bước 4
- Nếu rồi quay lại bước 1
Bước 4: Đánh dấu trang này đã được thăm Bóc tách trang và tìm cácliên kết có trong trang này
- Nếu có, thêm các liên kết vào cuối danh sách Quay lại bước 3
- Nếu không, quay lại bước 1
Bước 5: Kết thúc
1.8 Kỹ thuật lấy nội dung trang web bằng CURL trong PHP
CURL: là một hàm trong PHP Hàm này cho phép đọc các trang web tảitệp tin lên trang, sử dụng CURL để tự động cập nhật dữ liệu từ nhiều trangweb Đặc biệt CURL có khả năng lấy dữ liệu được cả những trang bị chặn
bằng proxy thông qua curl_proxy() Một CURL cần bao gồm các phần:
Khởi tạo CURL: để khởi tạo một curl ta sử dụng hàm curl_init() hàmnày có thể có đối số hoặc không có đối số với đối số là một địa chỉ thamchiếu
Thiết lập các tùy chọn cho CURL: để thiết lập tùy chọn ta sử dụng cúpháp lệnh : curl_setopt ($biến khởi tạo curl, $option , $giá trị)
Trang 20Thực hiện một CURL: để thực hiện một CURL ta sử dụng hàmcurl_exec ($ten curl) Sau khi một CURL được thực thi ta sẽ kết thúc phiênlàm việc này với hàm curl_close($ten curl).
Kỹ thuật lấy nội dung: Có hai cách sử dụng CURL để lấy dữ liệu
Cách 1: sử dụng GET để lấy dữ liệu từ một trang
function getPage($url, $referer, $timeout, $header){
curl_setopt ($curl, CURLOPT_URL, $url);
curl_setopt ($curl, CURLOPT_TIMEOUT, $timeout);
curl_setopt ($curl, CURLOPT_USERAGENT, sprintf("Mozi lla/%d.0",rand(4,5)));
curl_setopt ($curl, CURLOPT_HEADER, (int)$header);
curl_setopt ($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($curl, CURLOPT_SSL_VERIFYPEER, 0);
$html = curl_exec ($curl);
curl_close ($curl);
return $html;
}
Trang 21Cách 2: sử dụng POST để lấy dữ liệu
curl_setopt ($curl, CURLOPT_URL, $url);
curl_setopt ($curl, CURLOPT_TIMEOUT, $timeout);
curl_setopt ($curl, CURLOPT_USERAGENT, sprintf("Mozilla /%d.0",rand(4,5)));
curl_setopt ($curl, CURLOPT_HEADER, 0);
curl_setopt ($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt ($curl, CURLOPT_POST, 1);
curl_setopt ($curl, CURLOPT_POSTFIELDS, $post);
curl_setopt ($curl, CURLOPT_HTTPHEADER,
• Tốc độ tải chậm hơn so với CURL
• Không thể thực hiện được việc tải trang khi trang web đó có thiết lập proxy
1.9 Phương pháp tổng hợp thông tin
Có một số phương pháp bóc tách, thu thập thông tin đó là: Biểu thứcchính quy, DOM XML, JQUERY- Ajax
1.9.1 Biểu thức chính quy
Biểu thức chính quy (regular expressions hay regex): là một chuỗimiêu tả một bộ chuỗi khác, theo những quy tắc và cú pháp nhất định, hay có
Trang 22thể hiểu một cách đơn giản hơn nó là một mẫu (pattern) dùng để mô tả mộtlớp ký tự nào đó.
Áp dụng vào trong vấn đề thu thập thông tin, biểu thức chính quy đóngmột vai trò quan trọng trong việc bóc tách thông tin, sử dụng thành thạo biểuthức chính quy ta có thể áp dụng để bóc tách được nội dung của một trangHTML
Trong PHP, ta có thể sử dụng biểu thức chính quy thông qua hàm regex.PHP cung cấp 3 nhóm hàm regex tên của chúng được bắt đầu bởi Ereg,Mb_ereg và Preg Dưới đây chúng ta chỉ đề cập đến nhóm hàm Preg Một sốhàm phổ biến trong nhóm hàm Preg là:
• Preg_match: sử dụng khi muốn lấy ra một chuỗi trong một chuỗi nguồnkhác, cấu trúc hàm như sau:
Preg_match($pattern,$string, $match)
Trong đó:
$pattern: Biểu thức chính quy
$string: Chuỗi nguồn
$match: Lưu kết quả trả về
• Preg_match_all: hoàn toàn tương tự như đối với preg_match nhưng có
sự khác biệt duy nhất đó là nó sẽ thực hiện cho đến khi so khớp hết vớichuỗi nguồn
Biểu thức chính quy bao gồm 11 ký tự, cặp ký tự mang ý nghĩa đặc biệt,được thể hiện ở bảng dưới đây:
Bảng 1.1 Các ký tự trong biểu thức chính quy
đúng trước nó phải xuất hiện ít nhất a
Trang 23có ý phủ định
[^a-z]
Tập hợp tất cả các
ký tự không phải là các ký tự a-z
$
Quy định ký tự trước nó phải kết thúc ở vị trí cuối
(.*)basic$ Chuỗi phải kết thúc
bởi từ basic
Ký tự thay thế cho bất kỳ ký tự nào trừ
ký tự xuống dòng
trên 1 dòng
Không có, a,aa,aaaa,…
Ngoài các ký tự trên thì trên thực tế còn có những ký tự không in được
như: esc, space… Để giải quyết vấn đề này chúng ta sử dụng tổ hợp phím như
trong bảng sau:
Bảng 1.2 Tổ hợp phím trong biểu thức chính quy
Trang 251.9.2 DOM và XML
• Phương pháp sử dụng DOM XML
DOM (Document Object Model) là mô hình các đối tượng văn bản,trong trường hợp này ta có thể tạm hiểu nó như là một "cây" mô tả cấu trúccủa văn bản
DOM là phần quan trọng trong định nghĩa các thành phần của một tàiliệu XML DOM trong HTML ngoài việc thể hiện các thành phần một trangweb còn cung cấp các phương pháp đặc thù của HTML tùy vào hỗ trợ củatrình duyệt (IE hay FireFox) như bẫy sự kiện hay thay đổi classCSS DOMgiờ đây được dùng nhiều bởi thư viện DOMXML của PHP
Cấu trúc của DOM: Trước khi bắt đầu làm việc với DOM, chúng ta cầnhình dung thực sự DOM là gì?
DOM là một tập của các nút, hay những mẩu thông tin, được tổ chứctrong một hệ phân cấp Hệ phân cấp này cho phép một người phát triển điềuhướng quanh biểu đồ hình cây để tìm kiếm thông tin cụ thể Phân tích cấu trúcthường đòi hỏi toàn bộ tài liệu phải được nạp và hệ phân cấp cần được xâydựng trước khi công việc được hoàn thành Bởi vì nó được dựa trên một hệphân cấp của thông tin
Đối với các tài liệu tương đối lớn, việc phân tích và nạp toàn bộ tài liệu
có thể rất chậm và chiếm nhiều tài nguyên, nên các phương tiện khác sẽ tốthơn khi làm việc với dữ liệu này Những mô hình dựa trên sự kiện, như là APIđơn giản dành cho XML sẽ làm việc trên luồng của dữ liệu bằng cách xử lý
dữ liệu khi nó đi qua Một API dựa trên sự kiện không cần phải xây dựng cây
dữ liệu trong bộ nhớ, nhưng nó không cho phép một người phát triển thay đổi
dữ liệu trong tài liệu gốc
Theo cách khác, DOM cũng cung cấp một API cho phép một người pháttriển thêm, sửa, di chuyển, hay xóa các nút tại bất cứ vị trí nào trên cây dữliệu để tạo ra một ứng dụng
Trang 26Về tổng quan, các phần cơ bản của tệp XML bao gồm:
Khai báo XML: Khai báo cơ bản <?xml version"1.0"?> xác định tệp nàynhư là một tài liệu XML Nó ít khi chỉ định một mã hóa trong khai báo, nhưhiển thị bên dưới Theo cách này, trình phân tích có thể đọc các tài liệu XML,cho dù tệp XML sử dụng bất cứ ngôn ngữ hay mã hóa nào, nhưng với điềukiện trình phân tích phải hiểu được các mã hóa đó
Khai báo DOCTYPE: XML là một cách thuận tiện để trao đổi thông tingiữa con người và các thiết bị máy móc, nhưng để nó hoạt động tốt, cần thiếtphải có một bảng từ vựng chung Tùy chọn DOCTYPE có thể được sử dụng
để chỉ định một tài liệu - trong trường hợp này, nó là orders.dtd - để so sánhvới tệp này nhằm đảm bảo không xảy ra sự thất lạc hay thiếu thông tin (ví dụ,một userid bị thiếu hay tên phần tử bị sai chính tả) Những tài liệu được xử lýtheo cách này được coi như là các tài liệu hợp lệ
Dữ liệu: Dữ liệu trong một tài liệu XML phải được chứa trong một phần
tử gốc đơn lẻ, như là phần tử orders dưới đây Đối với một tài liệu XML sắpđược xử lý, nó phải được tổ chức tốt
<item instock="Y" itemid="SA15">
<name>Silver Show Saddle, 16 inch</name>
Trang 27<item instock="Y" itemid="WB78">
<name>Winter Blanket (78 inch)</name>
/*** a new dom object ***/
$dom = new domDocument;
/*** load the html into the object ***/
Trang 28$html: Nguồn HTML hoặc XML để tìm kiếm
$strict: Cho biết load HTML hay XML Trong hàm trên chúng ta mặc định load HTML
1.9.3 Jquery
• Giới thiệu về Jquery
JQuery: Là một thư viện kiểu mới của Javascript giúp đơn giản hóa cáchviết Javascript và tăng tốc độ xử lý các sự kiện trên trang web JQuery thêmtương tác Ajax vào trong trang web JQuery được thiết kế để thay đổi cáchviết Javascript
JQuery hướng tới các thành phần trong tài liệu HTML: Nếu không sửdụng thư viện JavaScript này, bạn phải viết rất nhiều dòng code mới có thể đạtđược mục tiêu là di chuyển trong cấu trúc cây (hay còn gọi là DOM-Document Object Model) của một tài liệu HTML và chọn ra các thành phầnliên quan Jquery cho phép bạn chọn bất cứ thành phần nào của tài liệu để đọcmột cách dễ dàng như sử dụng CSS
Thay đổi giao diện của một trang web: CSS là công cụ rất mạnh để địnhdạng một trang web nhưng nó có một nhược điểm là không phải tất cả cáctrình duyệt đều hiển thị giống nhau Cho nên JQuery ra đời để lấp chỗ trốngnày, vì vậy các bạn có thể sử dụng nó để giúp trang web có thể hiển thị tốttrên hầu hết các trình duyệt Hơn nữa JQuery cũng có thể thay đổi class hoặcnhững định dạng CSS đã được áp dụng lên bất cứ thành phần nào của tài liệuHTML ngay cả khi trang web đó đã được trình duyệt load thành công
Thay đổi nội dung của tài liệu: Jquery không phải chỉ có thể thay đổi bềngoài của trang web, nó cũng có thể thay đổi nội dung của chính tài liệu đóchỉ với vài dòng code Nó có thể thêm hoặc bớt nội dung trên trang, hình ảnh
có thể được thêm vào hoặc đổi sang hình khác, danh sách có thể được sắp xếplại hoặc thậm chí cả cấu trúc HTML của một trang web cũng có thể được viếtlại và mở rộng Tất cả những điều này bạn hoàn toàn có thể làm được nhờ sự
Trang 29giúp đỡ của giao diện lập trình ứng dụng API (Application ProgrammingInterface)
Tương tác với người dùng: Cho dù công cụ bạn dùng có mạnh mẽ đếnmấy, nhưng nếu bạn không có quyền quyết định khi nào nó được sử dụng thìcông cụ đó cũng coi như bỏ Với thư viện JavaScript như JQuery, nó cho bạnnhiều cách để tương tác với người dùng ví dụ như khi người dùng nhấp chuộtvào đường link thì sẽ có gì xảy ra Nhưng cái hay của nó là không làm chocode HTML của bạn rối lên chính là nhờ các Event Handlers Hơn nữa EventHandler API sẽ bảo đảm rằng trang web của bạn tương thích hầu hết với cáctrình duyệt
Tạo hiệu ứng động cho những thay đổi của tài liệu: Để tương tác tốt vớingười dùng, các nhà thiết kế web phải cho người dùng thấy được hiệu ứng gì
sẽ xảy ra khi họ làm một tác vụ nào đó JQuery cho phép bạn sử dụng rấtnhiều hiệu ứng động như mờ dần, chạy dọc chạy ngang…Nó còn cho phépbạn tự tạo ra các hiệu ứng của riêng mình
Lấy thông tin từ server mà không cần tải lại trang web Đây chính làcông nghệ ngày càng trở nên phổ biến AJAX (Asynchronous JavaScript andXML- JavaScript và XML không đồng bộ), nó giúp người thiết kế web tạo ranhững trang web tương tác cực tốt và nhiều tính năng Thư viện JQuery loại
bỏ sự phức tạp của trình duyệt trong quá trình này và cho phép người pháttriển web có thể tập trung vào các tính năng đầu cuối Đơn giản hoá các tác vụJavaScript Ngoài những tính năng như đã nêu ở trên, JQuery còn cho phépbạn viết code JavaScript đơn giản hơn nhiều so với cách truyền thống như làcác vòng lặp và điều khiển mảng
• Cách sử dụng Jquery selector
Trang 30JQuery selector giúp chúng ta dễ dàng truy vấn đến các phần tử DOM(Document Object Model – Mô hình đối tượng tài liệu) một cách nhanh nhất,code đơn giản và ngắn ngọn nhất
Ví dụ: để truy vấn đến phần tử có id là header, với cách viết javascriptthông thường bạn phải viết như sau: document.getElementById("header") Thì với jQuery, công việc chỉ còn đơn giản như sau: $("#header") như vậy làchúng ta đã lấy được nội dung của toàn bộ thẻ header
Để sử dụng một jquery selector chúng ta sẽ sử dụng theo cú pháp sau: $(“css selector”) hoặc jquery(“css selector”)
Dưới đây là bảng mô tả ý nghĩa của các jquery selector:
Trang 31Chỉ chọn phần
tử có id là header
Chọn tất cả các phần tử có class
có tên là content
Lựa chọn tất cả các phần tử có trong tài liệu HTML
input’)
Chọn tất cả các thành phần inputcủa from
Trang 32Child selector ul>il $(‘ul>il’)
Chọn tất cả các thành phần li (cấp 1 )trong tài liệu HTML
Chọn thành phần
em phía sau liền
kề thẻ div trong tài liệu HTML
Chọn thành phần
em liền kề phía trước của thẻ divtrong tài liệu HTML
Trang 33CHƯƠNG 2 THIẾT KẾ HỆ THỐNG WEBSITE
2.1Đặc tả chi tiết và phân tích yêu cầu đề tài
2.1.1 Xây dựng bộ lõi bóc tin chung
• Yêu cầu: Yêu cầu đặt ra cần có một hệ thống tự động thu thập và bóctách nội dung thông tin theo yêu cầu trực quan của người sử dụng vớinội dung thông tin kết quả trả ra ở dạng chuẩn và có cấu trúc để trởthành đầu vào cho ứng dụng, hệ thống khác
• Cách tiếp cận: Sử dụng phương pháp phân tích mã HTML truy xuấttrực tiếp vào nội dung toàn diện rồi tiến hành bóc tách bằng cách sửTree-DOM Sau quy trình khai thác, nội dung sẽ trở thành độc lập vớiwebsite nguồn, được lưu trữ và tái sử dụng
2.1.2 Xây dựng bộ đọc nhận dạng dữ liệu theo từng Website nguồn
• Yêu cầu: Người sử dụng có thể chọn các website đã được định nghĩa cóthể lấy tin, và lấy tin về
• Cách tiếp cận: Dựa vào địa chỉ của website nguồn, lấy được mã nguồnHTML, sử dụng RSS để bóc tách nội dung tin, trả về các tin tức
2.1.3 Xây dựng tính năng quản trị và tương tác với dữ liệu bóc được
• Yêu cầu: Người quản trị có thể chỉnh sửa nội dung của phần dữ liệu đãđược bóc tách như thêm, sửa, xóa Và có thể sử dụng nó để đăng lênwebsite của mình theo ý muốn
• Cách tiếp cận: Sau khi khối dữ liệu lấy về được lưu vào cơ sở dữ liệu,người quản trị có thể tùy chỉnh nội dung dữ liệu theo ý muốn
2.1.4 Xây dựng tính năng đăng tin tự động sau khi đã lọc tin
• Yêu cầu: Người quản trị có thể lựa chọn khối dữ liệu lấy về sẽ đượchiện thị ngay lên website hoặc chờ biên tập lại nội dung sau đó mới chođăng lên website
• Cách tiếp cận: Với dữ liệu được lấy về, người quản trị có thể mặc định
nó hiện thị ngay trên website hoặc chỉnh sửa nội dung sau đó mới đănglên website bằng cách đặt trạng thái của khối dữ liệu đó là true hoặcfalse Nếu là true, thì khối dữ liệu đó sẽ hiện thị ngay lên trang web vàngược lại
Trang 342.1.5 Tự động cập nhật tin tức theo trang nguồn
• Yêu cầu: Khi lấy được tin từ trang nguồn, sau một thời gian thì tin đó ởtrang nguồn bị xóa, hoặc sửa thì tin tức ở website của mình cũng sẽ cậpnhật theo
• Cách tiếp cận: Vào trang nguồn nếu không có tin tức đó, thì xóa bỏ tintức đó trong website của mình
2.1.6 Sao lưu tin vào thư mục và xóa bỏ những tin cũ theo số ngày quy định
quá hạn.
• Yêu cầu: Vì tin tức nếu cứ lấy, sẽ càng ngày càng tích chứa nhiều Do
đó, cần có chức năng xóa bỏ những tin tức không cần thiết, nhưng phảisao lưu trước khi xóa
• Cách tiếp cận: Dựa vào ngày đăng của tin so sánh với ngày hiện tại nếuquá hạn thì sao lưu ra thư mục và thực hiện xóa bỏ tin trong cơ sở dữliệu
2.1.7 Dữ liệu sau bóc tách có thể loại bỏ một số định dạng
• Yêu cầu: Một số nội dung có định dạng phông chữ, kiểu chữ… củatrang nguồn, nhưng lại không phù hợp với website của mình, do đó cần
có chức năng xóa bỏ những định dạng không cần thiết
2.1.8 Xuất các tin tức thành tài liệu HTML
• Yêu cầu: Các chức năng như xuất dữ liệu, xuất thành tài liệu HTML trợgiúp việc đóng gói, chuyển mang dữ liệu, tuy nhiên tài liệu HTML xuấtbản còn tương đối thô sơ
Hệ thống thu thập vàbóc tách nội dung thông
tin
Thể hiệnnội dung
Quản lýnội dung
Bóc táchnội dungThu thập
Trang 35Hình 2.1 Biểu đồ phân cấp chức năng
Chia nộidung đầuvào thànhcác danhmục trênmenu
Quản trị danh mục menu
Nhập bộlọc chonguồnđầu vàoxác địnhban đầu
Nhập
nguồn tin
đầu vào
Quản lý nhóm tin
Thu thập
nội
nội dungchi tiếtnhững bàiliền quan
Cấu hìnhcho tiếntrình tựđộng táchnội dung
Quản lýtin tức
Trang 362.2.2 Biểu đồ luồng dữ liệu
+ Biểu đồ luồng dữ liệu mức khung cảnh (mức 0):
Hình 2.2 Biều đồ luồng dữ liệu mức khung cảnh
Qua biểu đồ mức khung cảnh ta thấy: User gửi yêu cầu đến quản lý,Admin là người trực tiếp quản lý trang Web sẽ xử lý yêu cầu đó và cấp phép
có hoặc không đối với User
+ Biểu đồ luồng dữ liệu mức đỉnh (mức 1):
Kho dữ liệu
Hình 2.3 Biểu đồ luồng dữ liệu mức đỉnh
+ Biểu đồ luồng dữ liệu mức dưới đỉnh (mức 2)
Yêu cầu
WebsiteKết quả
User
Yêu cầu thu thập tinYêu cầu bóc tin
Admin