Tải bản đầy đủ (.docx) (54 trang)

ĐATN đề tài nghiên cứu trích rút nội dung trang web và xây dựng website tổng hợp thông tin (Có link source code))

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (703.48 KB, 54 trang )

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG
KHOA CƠNG NGHỆ THƠNG TIN

PHẠM THỊ LIÊN

NGHIÊN CỨU TRÍCH RÚT DỮ LIỆU TRANG WEB VÀ
XÂY DỰNG WEBSITE TỔNG HỢP THÔNG TIN

ĐỒ ÁN TỐT NGHIỆP ĐẠI HỌC
NGÀNH KHOA HỌC MÁY TÍNH

THÁI NGUYÊN, NĂM 2020


TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG
KHOA CÔNG NGHỆ THÔNG TIN

ĐỒ ÁN TỐT NGHIỆP ĐẠI HỌC
NGÀNH KHOA HỌC MÁY TÍNH

Đề tài:
NGHIÊN CỨU TRÍCH RÚT DỮ LIỆU TRANG WEB VÀ
XÂY DỰNG WEBSITE TỔNG HỢP THÔNG TIN

Sinh viên thực hiện: PHẠM THỊ LIÊN
Lớp: KHMT K14A

Hệ chính quy

Giảng viên hướng dẫn: TS. ĐÀM THANH PHƯƠNG


THÁI NGUYÊN, NĂM 2020


LỜI CẢM ƠN
Sau khoảng thời gian được học tập và rèn luyện tại trường Đại Học Công
nghệ thông tin và Truyền thông – Đại học Thái Nguyên, dưới sự chỉ bảo tận tình
của các thầy cơ trong các phịng khoa chun mơn, nay chúng em đã gần hết khố
học, đang trong giai đoạn hoàn thành luận văn tốt nghiệp và sắp sửa trở thành một
người kỹ sư công nghệ thông tin có thể góp sức xây dựng cho sự phát triển xã hội,
đất nước. Để được như ngày hôm nay chúng em vô cùng biết ơn tất cả các thầy cô
trong Khoa Công nghệ thông tin và các thầy cô trong bộ mơn Khoa học máy tính đã
tận tình giảng dạy, hướng dẫn, truyền đạt những kiến thức, kinh nghiệm quý báu
cho chúng em trong khoảng thời gian được học tập, rèn luyện tại trường. Thầy TS.
Đàm Thanh Phương, người đã tận tình hướng dẫn, định hướng, giúp đỡ và chỉ dạy
chúng em rất nhiều trong suốt quá trình thực hiện luận văn tốt nghiệp. Các anh chị
em sinh viên các khoá đã cùng chúng em học tập và chia sẻ kiến thức tiếp thu trong
quá trình theo học tại trường. Đồng thời chúng em cũng xin gửi lời cảm ơn đến cha
mẹ, anh chị, bạn bè những người luôn đứng bên cạnh chúng em để động viên, an ủi,
ủng hộ về vật chất lẫn tinh thần trong suốt khoảng thời gian qua.
Với lòng biết ơn chân thành, chúng em xin gởi lời chúc sức khoẻ và những gì
tốt đẹp nhất đến các thầy cô trong khoa, trong nhà trường, những bậc cha mẹ, anh
chị đáng kính và tồn thể các bạn bè đã và đang học tại trường Đại học Công nghệ
thông tin và Truyền thông Thái Nguyên.

Phạm Thị Liên

3


TĨM TẮT LUẬN VĂN


Với sự bùng nổ về cơng nghệ thông tin những năm gần đây, đặc biệt là sự
phát triển mạnh mẽ như vũ bão của trí tuệ nhận tạo và machine learning, cuộc sống
của con người đã càng ngày càng trở nên phong phú và đa dạng hơn. Kho tàng tri
thức của Internet đã làm thay đổi đáng kể nhiều lĩnh vực, từ học tập, nghiên cứu cho
đến kinh doanh và thương mại. Tuy nhiên con người vẫn khơng dừng lại, họ ln có
những khát khao tìm tịi và phát triển, đặc biệt là đối với chiếc máy tính. Chiếc máy
tính cá nhân đã được ra đời để trợ giúp cho con người, và họ vẫn ln tìm cách làm
cho nó có thể hỗ trợ được cho con người nhiều hơn nữa, thậm chí là làm thay cho
con người.
Trong thực tế hiện nay, lượng thông tin trên Internet càng ngày càng khổng
lồ, điều này khiến việc sử dụng World Wide Web để khai thác thơng tin hữu ích,
phục vụ cho các mục đích cá nhân ln có những khó khăn nhất định của nó. Nhất
là đối với những mục đích địi hỏi phải có sự thu thập thơng tin với khối lượng lớn
trên Web, chẳng hạn một người muốn tổng hợp thơng tin của các bài báo có cùng
một chủ đề (cùng một tác giả…) từ nhiều website thông tin khác nhau. Những công
việc như thế này nếu được thực hiện thủ cơng bằng sức người thì sẽ mất rất nhiều
thời gian, công sức, và chúng cũng khá tẻ nhạt do tính chất phải lặp đi lặp một vài
thao tác của việc thu thập dữ liệu.
Đề tài Luận Văn Tốt Nghiệp này sẽ cố gắng giải quyết vấn đề nêu trên, bằng
cách thu thập dữ liệu từ trang web tinhte.vn sau đó xây dựng một website tổng hợp
thơng tin đã thu thập từ trang báo này và phân loại chúng thành các danh mục.
Website này giúp bạn đọc có cái nhìn tổng qt hơn về một chủ đề mà khơng cần
phải tìm kiếm vất vả.

4


MỤC LỤC


5


DANH MỤC HÌNH

6


CHƯƠNG I. CƠ SỞ LÝ THUYẾT
1.1 Tìm hiểu và phân tích sơ bộ
1.1.1 World Wide Web
1.1.1.1 Khái niệm

Hình 1-1: Word Wide Web
World Wide Web (www hay gọi tắt là Web) là một ứng dụng phổ biến và
phát triển mạnh mẽ nhất của Internet hiện nay. World Wide Web là một mạng lưới
bao gồm các tài liệu siêu văn bản (hypertext) được đặt trên các máy tính nằm trong
mạng Internet. Các siêu văn bản này có khả năng liên kết lẫn nhau thông qua các
siêu liên kết (hyperlink). Sử dụng một trình duyệt web (web browser), con người có
thể xem được các trang web (website, cũng chính là một siêu văn bản) trên màn
hình máy vi tính, nội dung các trang web có thể có chữ, hình ảnh, video, thậm chí
có thể tương tác với người sử dụng thông qua các thiết bị như bàn phím, chuột.
Cũng chính nhờ các hyperlink mà các trang web có thể liên kết được với nhau thông
qua chỉ một cú click chuột, đây là khả năng đem lại sự mở rộng vô cùng lớn cho
world wide web.
Nội dung các trang web chủ yếu được viết bằng ngôn ngữ HTML hoặc
XHTML. Khi muốn truy cập một trang web, trình duyệt web sẽ gửi yêu cầu đến

7



máy chủ (web server) chứa trang web đó. Máy chủ sẽ hồi đáp bằng nội dung trang
web được yêu cầu trong trường hợp trang web đó thật sự tồn tại trên máy chủ và
được cho phép truy cập. Cả hai quá trình yêu cầu và hồi đáp này đều được thực hiện
dựa trên giao thức HTTP (Hyper Text Transfer Protocol). Nội dung các trang web
có thể là văn bản tĩnh (static web page – trang web tĩnh) hoặc cũng có thể được sinh
ra bởi các web server ứng với mỗi lượt yêu cầu, các yêu cầu khác nhau đến cùng
một trang web có thể nhận được các nội dung khác nhau (dynamic web page – trang
web động).
1.1.1.2 Phân loại
World Wide Web có thể được phân loại thành hai loại: các trang web tĩnh và
các trang web động. Sriram và Hector [1] đưa ra định nghĩa sau về trang web động:
“Một trang P được gọi là động nếu như một phần hoặc tất cả nội dung của nó được
sinh ra tại thời điểm chạy (tức là sau khi yêu cầu của máy khách được máy chủ
nhận) bởi một chương trình thực thi nằm trên máy chủ hoặc máy khách. Điều này
ngược lại với một trang tĩnh P1, khi mà toàn bộ nội dung của P1 đã tồn tại sẵn trên
máy chủ và luôn sẵn sàng được gửi cho máy khách ngay sau khi một yêu cầu được
nhận.”
Nhiều nghiên cứu đã cho thấy phần lớn nội dung trên Web đều là các nội
dung động. Một trang web động cũng có thể có hai kiểu: động về nội dung
(dynamic content) và động về hình thức thể hiện (dynamic appearance). Những
trang web động về hình thức thể hiện có thể chỉ chứa nội dung tĩnh, nhưng có chứa
những đoạn mã chạy ở máy khách, những đoạn mã này có thể làm thay đổi sự thể
hiện của trang web (màu sắc, kích cỡ …).
a) Phân loại dựa vào sự thể hiện của tính động
Theo thời gian (temporal dynamism): đây là những trang web mà nội dung
của chúng có thể được thay đổi, cập nhật theo thời gian. Điều này đồng nghĩa với
việc: các yêu cầu đến cùng một trang web, khi được gửi ở hai thời điểm khác nhau
có thể sẽ nhận được hai nội dung khác nhau.


8


Theo máy khách (client-based dynamism): những trang web có khả năng tùy
biến theo người sử dụng (client) sẽ được xếp vào mục này. Ví dụ một trang tin tức
tổng hợp có khả năng chọn lọc các tin tức khác nhau, tùy thuộc vào sở thích của
người sử dụng đang đăng nhập. Những trang kiểu này thường không thể trực tiếp
truy xuất vào được mà phải vượt qua một bước xác thực danh tính (authentication).
Theo truy vấn (input dynamism): đây là những trang có nội dung phụ thuộc
vào truy vấn của người sử dụng. Một ví dụ điển hình là những trang có các mẫu
nhập liệu (form), chẳng hạn một trường nhập liệu để tìm kiếm một hoặc nhiều món
hàng trong cơ sở dữ liệu của trang web. Những trang kiểu này cũng không luôn
luôn truy xuất trực tiếp được (tùy thuộc vào phương thức truyền các tham số GET
hoặc POST, các trang kết quả nhận được cũng thường có số lượng rất lớn (tùy thuộc
số tổ hợp của các tham số truy vấn). Đây cũng thường là những trang web khơng
thể crawl được hồn tồn bởi các crawler, và được gọi là Web ẩn (hidden Web, deep
Web, invisible Web).
b) Phân loại dựa vào cách thức tạo ra tính động
Thực thi các chương trình nằm trên máy chủ (server-side programs): Trong
kỹ thuật này, một chương trình sẽ được thực thi trên máy chủ và sinh ra toàn bộ nội
dung HTML của trang web, sau đó được gửi đến máy khách yêu cầu. Ví dụ tiêu
biểu cho loại này là CGI hoặc Java Servlet. Những chương trình phía máy chủ này
cũng thường được dùng để xử lý các truy vấn từ người sử dụng.
Nhúng mã với sự thực thi phía máy chủ (embedded code with server-side
execution): các trang web động sẽ chứa cả nội dung HTML tĩnh cùng với các đoạn
mã được nhúng vào cùng với HTML. Khi một yêu cầu được nhận, các đoạn mã
nhúng này sẽ được thực thi trên máy chủ và sẽ sinh ra các đoạn code HTML thay
thế cho chúng. Kỹ thuật này khác kỹ thuật trên ở chỗ khơng phải tồn bộ mà chỉ
một phần nội dung HTML được sinh động. Các mã nhúng này có thể là PHP, Java
Scriplet, ASP hoặc các mã server-side khác.

Nhúng mã với sự thực thi phía máy khách (có thể có cả sự thực thi ở phía
máy chủ) (embedded code with client-side execution): Với kỹ thuật này thì các

9


đoạn mã được nhúng không chạy trên server mà chúng được máy khách tải về và
được thực thi trên máy khách. Nếu mã chỉ chạy trên máy khách thì đó có thể là
JavaScript, Java Applet hoặc Flash. Nếu vừa có sự thực thi ở máy khách và cả ở
máy chủ thì đó chính là Ajax, trong trường hợp này mã clien-side có thể trao đổi
thơng tin với server thơng qua một đối tượng đặc biệt là XMLHttpRequest để có thể
thay đổi nội dung trang web một cách động mà không cần load trang web mới.
1.1.2 Thu thập dữ liệu

 Khái niệm
Thu thập ngun nghĩa là tìm kiếm, góp nhặt và tập hợp lại. Thu thập dữ liệu
là quá trình tập hợp nhiều thơng tin theo những tiêu chí cụ thể nhằm làm rõ những
vấn đề, nội dung liên quan đến lĩnh vực nhất định. Thu thập dữ liệu là quá trình xác
định nhu cầu thơng tin, tìm nguồn thơng tin, thực hiện tập hợp thông tin theo yêu
cầu nhằm đáp ứng mục tiêu đã được định trước.

 Đặc điểm
Thu thập dữ liệu là hoạt động có tính mục đích. Q trình thu thập dữ liệu
phải giải đáp cụ thể các câu hỏi: Dữ liệu này thu thập để làm gì, phục vụ cho cơng
việc gì, liên quan đến những khía cạnh nào của vấn đề? Thu thập dữ liệu có tính đa
dạng về phương pháp, cách thức. Tùy theo yêu cầu về thơng tin, nguồn lực mà có
thể áp dụng các phương pháp, cách thức thu thập thông tin cho phù hợp
Thu thập dữ liệu có thể tìm kiếm từ các nguồn, kênh thông tin khác nhau.
Mỗi kênh thông tin có những ưu điểm và nhược điểm riêng, phù hợp với mỗi loại
thông tin cần thu thập. Việc lựa chọn nguồn thơng tin thích hợp bảo đảm hiệu quả

q trình thu thập và chất lượng của thông tin
Thu thập dữ liệu là một quá trình liên tục, nhằm bổ sung, hồn chỉnh thơng
tin cần thiết. Q trình thu thập chịu tác động của nhiều nhân tố về kỹ năng thu thập
thông tin, kỹ năng sử dụng các phương pháp, cách thức thu thập thông tin.
1.1.3 Web crawler
Một web crawler là một chương trình máy tính có thể “duyệt web” một cách
tự động và theo một phương thức nào đó được xác định trước. Vì là một chương

10


trình nên quá trình “duyệt web” của các web crawler khơng hồn tồn giống với q
trình duyệt web của con người (web crawler phải sử dụng các phương thức dựa trên
HTTP trực tiếp chứ không thông qua web browser như con người).
Các web crawler thường bắt đầu với một danh sách URL của các web page
để ghé thăm đầu tiên. Khi ghé thăm một URL, crawler sẽ đọc nội dung web page,
tìm tất cả các hyperlink có trong web page đó và đưa các URL được trỏ tới bới các
hyperlink đó vào danh sách URL. Dựa vào danh sách URL này, crawler lại tiếp tục
quá trình duyệt đệ quy để ghé thăm tất cả các URL chưa được duyệt đến. Quá trình
này được gọi là web crawling hoặc là web spidering, các web crawler còn được gọi
là các robot (bot) hoặc nhện web (web spider). Thường thì các crawler được tạo ra
để phục vụ cho một mục đích, tác vụ nào đó. Ví dụ các máy tìm kiếm (search
engine) sử dụng crawler để tải dữ liệu các web page, các web page này sau đó được
search engine đánh chỉ mục để có thể cho kết quả nhanh hơn khi được tìm kiếm.
Về bản chất, crawl web data chính là q trình duyệt đệ quy một đồ thị cây
có các node là các web page. Tùy thuộc vào chiến lược của crawler, các node có thể
được duyệt theo chiều sâu hoặc duyệt theo chiều rộng. Trong thực tế, quá trình
crawling web sẽ phải đối diện với rất nhiều vấn đề khó khăn như: kích thước khổng
lồ của world wide web, các trang web HTML được viết không chuẩn, hạn chế ghé
thăm một URL đã được ghé thăm trước đó, các trang web động, nội dung các trang

web được cập nhật thường xuyên v….

11


Hình 1-2: Sơ đồ hoạt động của một web crawler đơn giản

12


1.1.4 Web scraper
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ác web scraper được ra đời. Web Scraper là
một thuật ngữ để chỉ các phần mềm có khả năng bóc tách và trích xuất thơng tin
chứa trên các web page một cách tự động. Công việc này được gọi là web scraping,
web harvesting hoặc web data extraction. Các web scraper khác với web crawler ở
chỗ, trong khi web crawler tập trung vào việc duyệt các trang web thông qua các
liên kết hyperlink, thì web scraper lại tập trung vào việc chuyển đổi nội dung không
cấu trúc của các trang web (chủ yếu được viết bằng HTML) sang thành nội dung có
cấu trúc, sau đó bóc tách, trích xuất phần thơng tin mong muốn và lưu trữ lại vào
các cơ sở dữ liệu hoặc spreadsheet. Các web scraper cũng có thể thực hiện thêm các
cơng đoạn phân tích dữ liệu sau khi đã trích xuất được để phục vụ cho một mục
đích nào đó. Một số ứng dụng của web scraping bao gồm: so sánh giá cả thị trường
trực tuyến, nghiên cứu thị trường, thu thập thông tin để thống kê, theo dõi thông tin
thời tiết trên các website dự báo thời tiết, tổng hợp tin tức từ nhiều website v.v…
Một số kỹ thuật được sử dụng trong web scraping có thể kể ra như:

• So trùng: một kỹ thuật đơn giản nhưng khá hiệu quả để tìm kiếm các phần

nội dung chữ có sự tương đồng với nhau (do nội dung trang web chủ yếu là
ở dạng ký tự). Kỹ thuật này thường sử dụng regular expression (biểu thức



chính quy) để so trùng và tìm kiếm.
Lập trình HTTP: ta có thể lấy được nội dung trang web bằng cách gửi một
yêu cầu HTTP đến web server, cũng giống như cách web browser làm. Đây



cũng là một kỹ thuật được sử dụng bởi các web crawler.
Phân tích cấu trúc DOM: phân tích nội dung HTML của web page và xây
dựng một cây DOM (Document Object Model), giúp scraper có thể duyệt
các node trên cây này và chỉ lấy ra phần nội dung mà nó cần.

13


1.2 Các kiến thức nền tảng
1.2.1 HTML
HTML (HyperText Markup Language – ngôn ngữ đánh dấu siêu văn bản) là
một ngôn ngữ đánh dấu được thiết kế ra để tạo nên các trang web. HTML được xem
như là một ứng dụng của SGML (Standard Generalized Markup Language – một
chuẩn ISO định nghĩa các ngôn ngữ đánh dấu văn bản tổng quát). HTML được tổ
chức World Wide Web Consortium (W3C) duy trì và là ngôn ngữ đánh dấu cốt lõi
của World Wide Web. Tuy nhiên HTML hiện khơng cịn được phát triển tiếp mà
người ta đã thay thế nó bằng XHTML – một chuẩn HTML mở rộng dựa trên XML
và có cú pháp chặt chẽ hơn HTML. Mặc dù vậy nhưng phần lớn các trang web hiện
nay vẫn được viết bằng HTML, bởi nhiều nguyên nhân khác nhau (sử dụng các

công cụ soạn thảo HTML cũ, người viết code ngại thay đổi v.v…).
Một tài liệu HTML được tạo nên bởi các phần tử HTML. Một cách tổng
quát, một phần tử HTML bao gồm 3 thành phần: một cặp thẻ (tags) gồm một thẻ bắt
đầu và một thẻ kết thúc, các thuộc tính (nằm trong thẻ bắt đầu), và toàn bộ phần ký
tự, hình ảnh, nội dung thơng tin sẽ được hiển thị lên màn hình. Một phần tử HTML
là mọi thứ nằm giữa hai thẻ đầu cuối, tính cả hai thẻ này. Một thẻ HTML đơn giản
là một từ khóa được đặt giữa một cặp hai dấu bé hơn (<) và lớn hơn (>). Thẻ đóng
của một phần tử HTML ln có một ký tự “/” ngay sau ký tự “<”. Sau đây là một ví
dụ của một phần tử HTML ở dạng tổng quát nhất:

Hình 1-3: Phần tử HTML ở dạng tổng qt
Có bốn loại phần tử đánh dấu trong HTML:

• Đánh dấu có cấu trúc miêu tả mục đích của phần văn bản (ví dụ,

Football

sẽ điều khiển phần mềm đọc hiển thị “Football” là tiêu



đề cấp một).
Đánh dấu trình bày miêu tả phần hiện hình trực quan của phần văn bản bất
kể chức năng của nó là gì (ví dụ <b>in đậm</b> sẽ hiển thị thành in đậm).

14


• Đánh dấu liên kết ngoài chứa phần liên kết từ trang này đến trang kia, đây
chính là các phần tử thể hiện các liên kết hyperlink (ví dụ “ học Công nghệ thông tin và Truyền thông
Thái Nguyên</a> sẽ hiển thị cụm từ “Đại học Công nghệ thông tin và
Truyền thông Thái Nguyên” như một liên kết ngồi đến website




www.ictu.edu.vn).
Các phần tử thành phần điều khiển giúp tạo ra các đối tượng điều khiển như
các nút bấm, các ô textbox để nhập liệu.
HTML là ngôn ngữ không phân biệt hoa thường (hai thẻ <td> và <TD> đề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 ln ln đúng, có nhiều phần tử khơng cần thẻ đóng, ví dụ các thẻ
,
<hr> và <li>. Ngoài ra khi lồng nhau, các phần tử HTML cũng không cần thiết phải
lồng nhau theo đúng thứ tự (tức là thẻ nào mở trước thì phải đóng sau) ví dụ sau là
hợp lệ trong HTML:

Sự lồng nhau không đúng thứ tự của các phần tử HTML được gọi là overlapping
(phủ lên nhau), mặc dù điều này không được phép trong đặc tả SGML, nhưng lại
được chấp nhận bởi hầu hết các trình duyệt hiện nay.
Từ các đặc điểm trên ta có thể nhận thấy HTML khơng phải là một ngơn ngữ có
cú pháp chặt chẽ, các đặc điểm như khơng cần đóng thẻ hoặc không cần lồng nhau
đúng thứ tự sẽ là các trở ngại cho cơng việc đọc và phân tích văn bản HTML
(HTML parsing), đặc biệt nếu sử dụng phương pháp tìm kiếm so trùng. Chính vì
vậy, chúng ta cần phải chuyển đổi nội dung viết bằng HTML sang một định dạng
ngôn ngữ khác có sự chặt chẽ hơn về cú pháp, điều này sẽ đem lại thuận lợi hơn cho
quá trình xử lý về sau. Một ngôn ngữ đánh dấu được định nghĩa ra để thay thế cho
HTML đó chính là XHTML.
1.2.2 XML
XML (Extensible Markup Language – ngôn ngữ đánh dấu mở rộng) là một
ngôn ngữ đánh dấu mà người sử dụng có thể tự tạo ra các thẻ riêng của mình. Giống

15



như HTML, XML cũng được dựa trên SGML. Tuy nhiên, XML được thiết kế nhằm
mục đích truyền tải và lưu trữ thông tin, trong khi HTML tập trung vào việc thể
hiện thơng tin đó như thế nào. Về tính cấu trúc của nội dung, XML có thể dùng để
định nghĩa các cấu trúc ngẫu nhiên tùy ý trong khi HTML hồn tồn bị giới hạn.
Ví dụ của một tài liệu XML đầy đủ:

Hình 1-4: Ví dụ tài liệu XML có cấu trúc đầy đủ
1.2.3 XHTML
XHTML (Extensible HyperText Markup Language) là một ngơn ngữ đánh dấu
có cùng các khả năng như HTML, nhưng có cú pháp chặt chẽ hơn. XHTML được
xây dựng dựa trên XML và được cho rằng sẽ là ngôn ngữ thay thế cho ngôn ngữ
HTML trong tương lai.
Theo tổ chức W3C, khác biệt giữa XHTML 1.0 và HTML 4 về cơ bản thì
XHTML phải là một tài liệu XML chuẩn (well-formed), trong khi HTML không cần
phải thỏa điều kiện này. Cụ thể, một số điểm khác biệt như sau:
1.2.3.1 Tính chuẩn của một tài liệu XML (well-formed)
XHTML địi hỏi các tài liệu viết bằng XHTML phải có tính chất well-formed, có
nghĩa là tất cả các thẻ trong tài liệu đều phải có thẻ đóng tương ứng (ngoại trừ các
thẻ rỗng) và các phần tử phải lồng nhau một cách đúng thứ tự (thẻ nào mở trước thì
phải đóng sau). Ví dụ:
Đúng: các phần tử lồng nhau đúng thứ tự.

Sai: các phần tử lồng nhau không đúng (overlap).

16


a) Tên các phần tử và tên các thuộc tính của phần tử phải ở dạng chữ in thường

XHTML thừa kế các đặc tính của XML, trong đó có sự phân biệt chữ hoa
chữ thường (ví dụ <td> và <TD> là hai thẻ khác nhau), vì vậy để chuẩn hóa, tên của
tất cả các phần tử cũng như tất cả các thuộc tính của phần tử cần được viết dưới
dạng chữ thường.
b) Các thẻ khơng rỗng bắt buộc phải có thẻ đóng
Trong HTML 4, một số phần tử được phép viết khơng cần thẻ đóng. Tuy
nhiên XML khơng cho phép điều này. Tất cả các phần tử đều phải có thẻ đóng
tương ứng ngoại trừ các phần tử được định nghĩa trong DTD là EMPTY (các phần
tử này có thể có thẻ đóng đầy đủ hoặc được viết ở dạng tắt). Ví dụ:
Đúng: các phần tử đều có thẻ đóng

Sai: các phần tử khơng có thẻ đóng.

c) Các thuộc tính ln phải ghi rõ giá trị
Các thuộc tính của phần tử phải được viết dưới dạng tên = “giá trị” đầy đủ. Ví dụ:
Đúng:

Sai:

1.3 Các cơng nghệ liên quan
1.3.1 XPath
Xpath – XML Path – là một ngôn ngữ truy vấn được định nghĩa bởi W3C, sử
dụng để truy vấn các node hoặc tính tốn các giá trị lấy trong một tài liệu XML.
Một tài liệu XML được xem như là một sự thể hiện của cấu trúc phân cấp ở dạng
cây của nhiều phần tử, mỗi phần tử được xem như là một node của cây.
Giả sử có đoạn tài liệu XML như sau:

17



Với ví dụ này khi mở với trình duyệt IE chúng ta sẽ có kết quả sau:

Như vậy chúng ta thấy trên trình duyệt sẽ hiển thị y nguyên tài liệu gốc. Vậy
làm cách nào để chúng ta có thể đi lại trên các phần tử của tài liệu XML để trích ra
những dữ liệu mà chúng ta cần thiết.
Để đáp ứng điều này người ta thiết kế ra một ngơn ngữ Xpath. Xpath có một
vai trị quan trọng trong việc trao đổi dữ liệu giữa các máy tính hay giữa các chương
trình ứng dụng vì nó cho chúng ta sàng lọc các dữ liệu mà ta mong muốn.

18


Xpath xem XML như một cây, với ví dụ trên sẽ được biểu diễn dưới dạng
cây sau:

Hình 1-5: Biểu diễn Xpath dưới dạng cây
XPath đem lại khả năng duyệt các node trên cây hoặc lựa chọn chúng theo
các tiêu chí nào đó, dựa trên các mối quan hệ như cha - con, tổ tiên - con cháu. Một
biểu thức XPath (Xpath expression) có thể chọn một node hoặc một tập hợp các
node, hoặc nó có thể trả lại một giá trị dữ liệu dựa trên một hoặc nhiều node trong
tài liệu. XPath hiện có 2 phiên bản là XPath 1.0 và XPath 2.0.
1.3.1.1 Cú pháp và ngữ nghĩa
Một biểu thức XPath có thể là một đường dẫn vị trí (location path), đây là
loại biểu thức quan trọng nhất trong XPath. Một location path bao gồm một hoặc
nhiều bước (location step). Mỗi bước gồm có 3 thành phần sau:

• Một axis specifier (chỉ định hướng)
• Một node test
• Một hoặc nhiều predicate


19


Biểu thức XPath luôn được đánh giá một cách tương đối với một node ngữ cảnh
(context node). Một chỉ định hướng (axis specifier) “child” sẽ cho biết hướng di
chuyển (để tìm kiếm) sẽ là hướng đến các node con của node ngữ cảnh. Node test
và predicate sẽ dùng để lọc các node thu được một cách chi tiết hơn. Ví dụ node test
“A” đòi hỏi tất cả các node nhận được phải có tên là “A”. Một predicate dùng để chỉ
ra các node này phải có một số đặc điểm nào đó nữa. Cú pháp của biểu thức XPath
cũng có thể ở hai dạng: rút gọn và đầy đủ.
a) Cú pháp rút gọn
Ví dụ một tài liệu HTML như sau:

Hình 1-6: Đoạn code HTML
Một biểu thức XPath đơn giản:

Hình 1-7: Biểu thức Xpath đơn giản
Biểu thức XPath này sử dụng giá trị mặc định của các axis specifier đó là giá trị
child, và các step của biểu thức đều không sử dụng predicate. Biểu thức này chọn ra
các phần tử C nào mà là con của các phần tử B, và các phần tử B này cũng phải là
con của các phần tử A. Cú pháp này của XPath có nét tương đồng với cú pháp của
URI (Uniform Resource Identifier) cũng như cú pháp đường dẫn file của các hệ
điều hành Unix.
b) Cú pháp đầy đủ

20


1.3.1.2 Predicate
Một step của biểu thức XPath có thể có nhiều predicate. Mỗi predicate cũng

được viết dưới dạng biểu thức và nằm trong cặp ngoặc vuông [ ], các node nhận
được của biểu thức sẽ phải thỏa điều kiện của các predicate. Ví dụ
a[@href=’help.php’] sẽ chỉ trả về các phần tử có tên là a (trong các node con của
node ngữ cảnh) và có một thuộc tính href với giá trị help.php. Các predicate có thể
trả về giá trị boolean, số nguyên, hoặc một tập các node. Nếu giá trị trả về của
predicate là số nguyên thì giá trị này được hiểu là vị trí của node cần tìm, ví dụ p[1]
trả về phần tử p đầu tiên, p[last()] trả về phần tử p cuối cùng. Trong trường hợp trả
về một tập node thì khi tập node khác rỗng giá trị sẽ được hiểu là true, ví dụ p[@id]
trả về các node p có thuộc tính id.
1.3.1.3 Các hàm và toán tử
XPath 1.0 định nghĩa 4 kiểu dữ liệu: kiểu tập node (node-set), kiểu chuỗi ký
tự (string), kiểu số (number) và kiểu logic (boolean). Các toán tử phổ biến được
dùng trong XPath:

• Tốn tử hội “|“ để tìm hội của hai tập node.
• Tốn tử logic “and” và “or” (và một hàm not(boolean) để phủ định một biểu
thức
boolean).

• Các tốn tử cộng trừ nhân chi “+”, “-“, “*”, “div” và “mod”.
• Các tốn tử so sánh “=”, “!=”, “<”, “>”, “<=”, “>=”. Các hàm phổ biến trong


thự viện hàm của XPath 1.0:
position(): trả về giá trị kiểu số thể hiện vị trí của node trong một chuỗi các
node.
count(node-set): trả về số node có trong node-set.


• string(object?): chuyển bất kỳ kiểu dữ liệu nào thành kiểu chuỗi. Nếu tham

số là kiểu node-set thì hàm này trả về giá trị chuỗi của node đầu tiên trong
node-set (theo thứ tự xuất hiện trong tài liệu).
contains(s1, s2): trả về true nếu s1 chứa s2.


• true(), false(): trả về các giá trị true, false tương ứng.
21


Một số ví dụ:

 trả về các node item có thuộc tính price lớn hơn hai lần giá trị thuộc tính
discount của nó

 trả về các node product có node con comment chứa từ ‘bad’
1.3.2 Thư viện HtmlAgilityPack
Việc xử lý văn bản HTML và trích xuất các phần tử DOM trong văn bản
HTML thường gây cho lập trình viên gặp nhiều khó khăn, một giải pháp mà người
ta hay dùng là dùng regex để tách các đoạn các thẻ trong văn bản HTML, nay chúng
ta có thể sử dụng thư viện HtmlAgilityPack và dùng LINQ để truy vấn sẽ đơn giản
hơn nhiều. Đầu tiên ta cần phải download thư viện HtmlAgilityPack sau đó vào
visual studio add file HtmlAgilityPack.dll vào Refercences
Ví dụ về việc trích xuất các phần tử DOM trong văn bản HTML bằng thư
viện HtmlAgilityPack:
- Đầu tiên tạo 1 request đến trang

22


- Sau khi thực hiện lệnh này mã html sẽ nằm ở biến responseFromServer

chúng ta bắt đầu xử lý sử dụng thư viện trên.
Lấy tất cả link có trong trang :

Lấy tất cả thẻ div có class là : fon31mt1

Để lấy được nội dung của đoạn text ta sử dụng thuộc tính InnerHtml trong
class HtmlNode.Để xử lý các truy vấn khác ta sử dụng cơng nghệ Xpath đã trình
bày ở phần 1.3.1
1.3.3 Thư viện Quartz.NET trong ASP.NET
1.3.3.1 Thành phần của Quartz.NET
Quartz.NET là một công cụ của .NET cùng tên với công cụ nổi tiếng trong
framework lập lịch Job của JAVA, nó là một thư viện đặt lịch chạy tác vụ mã nguồn
mở có sẵn qua nuget.
Quartz bao gồm 3 thành phần chính là một job, một trigger và một scheduler.
Một job là một tác vụ được thực hiện. Trigger chỉ ra cách thức và thời gian job được
thực thi. Và cuối cùng job và trigger được đăng ký với scheduler, thành phần này sẽ
đảm bảo rằng job được thực thi theo thời gian cấu hình trong trigger.

23


Một job là một class. Để làm việc với Quartz, nó phải được triển khai từ
interface của Quartz là Ijob có một phương thức là Execute. Phương thức này định
nghĩa các logic được thực thi.
1.3.3.2. Ví dụ
Dưới đây là một ví dụ nhỏ về cài đặt gửi email tự động
using Quartz;
using System;
using System.Net;
using System.Net.Mail;

namespace ScheduledTaskExample.ScheduledTasks
{
public class EmailJob : IJob
{
public void Execute(IJobExecutionContext context)
{
using (var message = new MailMessage("", ""))
{
message.Subject = "Test";
message.Body = "Test at " + DateTime.Now;
using (SmtpClient client = new SmtpClient
{
EnableSsl = true,
Host = "smtp.gmail.com",
Port = 587,
Credentials = new NetworkCredential("", "password")
})
{
client.Send(message);
}
}
}
}
}
Phương thức Execute cần một đối tượng của interface IJobExecutionContext
như một tham số. Scheduler sẽ truyền nó trong khi gọi phương thức Execute của
job. Nó chứa các thơng tin cấu hình về job. Trong ví dụ cơ bản này, khơng dùng gì
đến các dữ liệu này của context nhưng có thể một số job chúng ta sẽ cần dùng đến.

24



Tất cả ví dụ này nhằm mục đích gửi một email. Thân của phương thức chứa bất cứ
cái gì mà bạn muốn làm. Nó có thể là truy vấn database và gửi mail cho các khách
hàng…
Phần tiếp theo là demo về scheduler sẽ cài đặt và job với trigger sẽ được tạo
và gán:
using Quartz;
using Quartz.Impl;
using System;
namespace ScheduledTaskExample.ScheduledTasks
{
public class JobScheduler
{
public static void Start()
{
IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler();
scheduler.Start();
IJobDetail job = JobBuilder.Create<EmailJob>().Build();
ITrigger trigger = TriggerBuilder.Create().WithDailyTimeIntervalSchedule(s
=>s.WithIntervalInHours(24).
OnEveryDay().StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(0, 0))).Build();
scheduler.ScheduleJob(job, trigger);
}
}
}
Trong ví dụ này class là JobScheduler. Trong thực tế, đoạn code không cần
đặt trong class này mà đặt bất cứ đâu người lập trình muốn. Trong một ứng dụng
web, nó sẽ là sự kiện Application_Start trong Global.asax. Trong ví dụ này, đoạn
code thực tế sẽ đặt trong phương thức gọi là Start. Một scheduler được tạo và khởi

chạy trong 2 dịng. Sau đó một job được tạo sử dụng Quartz.NET trong phương
thức JobBuilder.Create<T>, trong đó T là kiểu của job được tạo. Trong trường hợp
này, nó là thể hiện của EmailJob được định nghĩa ở trên.
Tiếp theo, một trigger được khởi tạo, trigger định nghĩa khi nào job được
thực thi. Trong trường hợp này, scheduler được chỉ định chạy hàng ngày vào nửa
đêm và sẽ chạy cứ mỗi 24 giờ. Nó thực thi hàng ngày và các tùy chọn thực thi có
thể linh hoạt và cho phép đặt lịch theo thời gian thực. Đây là ví dụ khác về trigger.

25


×