Tải bản đầy đủ (.pdf) (60 trang)

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

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 (1.32 MB, 60 trang )

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 2010

TRƯỜNG ………………….
KHOA……………………….

-----

----

Báo cáo tốt nghiệp
Đề tài:
TÌM HIỂU VỀ TRÌNH THU THẬP WEB VÀ XÂY DỰNG TRANG WEB VÀ
XÂY DỰNG TRANG TỔNG TỔNG HỢP THÔNG TIN

I


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 2010

LỜI CẢM ƠN
Tôi xin bày tỏ lịng biết ơn sâu sắc của mình đến thầy Hồng Xn Huấn, thuộc
bộ mơn Khoa học máy tính, khoa Công nghệ thông tin, trường Đại học Công Nghệ,
ĐHQGHN. Trong q trình thực hiện khóa luận, thầy đã nhiệt tình giúp đỡ, giải đáp
các thắc mắc tạo động lực giúp tơi hồn thành khóa luận tốt nghiệp này.
Tơi cũng xin được bày tỏ lời cảm ơn tới các thầy cơ trong bộ mơn nói riêng và
trong khoa Cơng nghệ thơng tin nói chung đã nhiệt tình giảng dạy để giúp chúng tơi có
được như ngày hơm nay.
Cuối cùng là lời cảm ơn tới gia đình, bạn bè những người ln sát cánh bên tơi
những lúc khó khăn, ln ủng hộ giúp đỡ để tơi hồn thành khóa luận này.

II




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 2010

TĨM TẮT NỘI DUNG
Do nhu cầu thu thập thông tin của con người ngày càng tăng, lượng thông tin trên
internet ngày càng phong phú nên vấn đề tổng hợp thông tin ngày càng trở nên bức
thiết. Với một lượng dữ liệu lớn việc thu thập bằng tay tốn rất nhiều công sức, và
không đạt hiệu quả cao, chính vì thế cần một cơng nghệ có thể tổng hợp thơng tin một
cách tự động và trình thu thập web đã ra đời.
Đề tài khóa luận đặt ra vấn đề tìm hiểu về trình thu thập thông tin trên web và
bước đầu sẽ xây dựng một ứng dụng có khả năng tổng hợp thơng tin tự động từ trang
báo điện tử lớn là trang Dân trí (). Ứng dụng đượ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 và được xây dựng dựa trên các
tiêu chí: tốc độ thu thập nhanh, cơ sở dữ liệu gọn nhẹ, đảm bảo tính toàn vẹn của tài
liệu gốc.

III


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 2010

MỤC LỤC
MỞ ĐẦU ............................................................................................................1
CHƯƠNG 1. TÌM HIỂU VỀ TRÌNH THU THẬP WEB.................................3
1.1. GIỚI THIỆU VỀ TRÌNH THU THẬP WEB ..............................................3
1.2. CÁCH XÂY DỰNG MỘT HẠ TẦNG THU THẬP...................................4
1.2.1. Frontier .................................................................................................6
1.2.2. Lược sử và kho lưu trữ trang.................................................................7
1.2.3. Cách lấy trang........................................................................................8

1.2.3.1. Tiêu chuẩn loại trừ robot ................................................................9
1.2.4. Bóc tách trang......................................................................................10
1.2.4.1. Tiêu chuẩn trích xuất URL ...........................................................11
1.2.4.2. Mơ hình thẻ HTML dạng cây .......................................................12
1.2.5. Trình thu thập đa luồng .......................................................................13
1.3. CÁC CHIẾN LƯỢC THU THẬP DỮ LIỆU ............................................15
1.3.1. Chiến lược thu thập dữ liệu theo chiều sâu .........................................16
1.3.2. Chiến lược thu thập dữ liệu theo chiều rộng .......................................16
1.3.3. Chiến lược thu thập dữ liệu theo ngẫu nhiên ......................................17
1.3.4. Chiến lược thu thập dữ liệu theo lựa chọn tốt nhất ngây thơ. .............17
1.4. ĐÁNH GIÁ CỦA TRÌNH THU THẬP.....................................................19
1.4.1. Độ quan trọng của trang web ..............................................................20
1.4.2. Phân tích tổng quát ..............................................................................21
1.4.2.1. Thước đo độ chính xác .................................................................22
1.4.2.2. Thước đo độ hoàn chỉnh ...............................................................22
CHƯƠNG 2. XÂY DỰNG WEBSITE TỔNG HỢP THÔNG TIN ...............25
2.1. CÁC KIẾN THỨC NỀN TẢNG ...............................................................25
IV


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 2010

2.1.1. Mạng tồn cầu .....................................................................................25
2.1.2. Giao thức truyền tải siêu văn bản........................................................28
2.1.3. Ngôn ngữ đánh dấu siêu văn bản ........................................................28
2.2. CÁC CÔNG NGHỆ LIÊN QUAN ...........................................................30
2.2.1. Ngơn ngữ lập trình PHP ......................................................................30
2.2.1.1. Biểu thức chính quy......................................................................31
2.2.1.2. Các hàm xử lý chuỗi .....................................................................34
2.2.1.2.1. Tìm kiếm chuỗi trong chuỗi...................................................34

2.2.1.2.2. Tìm vị trí của chuỗi con .........................................................34
2.2.1.2.3. Hàm so sánh chuỗi .................................................................34
2.2.1.2.4. Kiểm tra chiều dài của chuỗi .................................................35
2.2.2. MySQL................................................................................................35
2.2.3. Một số cơng nghệ và tiện ích khác......................................................37
2.2.3.1. Add-ons firebug của firefox .........................................................37
2.2.3.2. Ajax...............................................................................................37
2.3. PHÂN TÍCH ..............................................................................................38
2.3.1. Cấu trúc bài viết trong trang báo điện tử.............................................38
2.3.2. Các cách thu thập bài viết ...................................................................42
2.3.2.1. Cách làm truyền thống..................................................................42
2.3.2.1.1. Các bước thực hiện ................................................................42
2.3.2.1.2. Nhận xét .................................................................................44
2.3.2.2. Cách làm mới................................................................................45
2.3.2.2.1. Các bước thực hiện ................................................................45
2.3.2.2.2. Nhận xét .................................................................................46
2.4. THIẾT KẾ..................................................................................................47
2.4.1. Cấu trúc cơ sở dữ liệu..........................................................................47
V


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 2010

2.4.1.1. Danh sách các bảng ......................................................................47
2.4.1.2. Chi tiết các bảng ...........................................................................47
2.4.2. Phần quản trị cơ sở dữ liệu..................................................................49
2.4.3. Phần giao diện chính trang web ..........................................................50
CHƯƠNG 3: KẾT LUẬN .................................................................................50
3.1. CÁC KẾT QUẢ ĐÃ ĐẠT ĐƯỢC ............................................................51
3.2. HƯỚNG PHÁT TRIỂN CỦA ĐỀ TÀI .....................................................51

TÀI LIỆU THAM KHẢO..................................................................................53

VI


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 2010

BẢNG DANH MỤC CÁC HÌNH MINH HỌA
Hình 1: Một vịng thu thập web cơ bản ..................................................................5
Hình 2: Mơ hinh cây tương ứng với một mã nguồn HTML.................................12
Hình 3: Một mơ hình trình thu thập đa luồng.......................................................14
Hình 4: Hình minh họa về độ hồn chỉnh và độ chính xác ..................................21
Hình 5: Hình mình họa thu hồi mục tiêu ..............................................................23
Hình 6: So sánh giữa thuật tốn breadth-first và naive best-first .........................24
Hình 7: World wide web.......................................................................................26
Hình 8. Tương tác client và server .......................................................................28
Hình 9: Add-ons firebug của trình duyệt firefox..................................................37
Hình 10: Cấu trúc phần bài viết............................................................................39
Hình 11: Cấu trúc phần chuyên mục ....................................................................40
Hình 12: Cấu trúc phần trang chủ.........................................................................41
Hình 13: Giao diện phần quản trị cơ sở dữ liệu....................................................49
Hình 14: Giao diện của trang web tổng hợp thông tin .........................................50

VII


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 2010

MỞ ĐẦU
Ngày nay nhờ sự bùng nổ của công nghệ thông tin, lịch sử nhân loại đã bước

sang một trang mới. Những thành tựu của ngành công nghệ thông tin là vô cùng to lớn,
nó đã chi phối và làm thay đổi mọi mặt của đời sống xã hội, làm cho cuộc sống của
con người văn minh, hiện đại hơn. Sự ra đời của internet chính là bước tiến vĩ đại của
nhân loại, là yếu tố quan trọng bậc nhất chi phối cuộc sống của chúng ta ngày nay.
Nhờ có internet thế giới trở nên ‘phẳng’ hơn, ở mọi nơi trên trái đất chúng ta đều có
thể học tập và tìm kiếm thơng tin.
Theo guồng quay của cuộc sống, thế giới internet ngày càng rộng lớn và phong
phú hơn. Cứ mỗi phút trôi qua có thêm hàng triệu trang web được sinh ra để làm giàu
cho vốn tài nguyên tri thức của nhân loại. Nhưng cũng chính vì thế mà việc chọn lọc,
tìm kiếm thơng tin lại trở nên khó khăn hơn. Với kho dữ liệu đồ sộ như internet, vấn
đề trích xuất và tổng hợp thông tin đã trở thành vấn đề thực sự cấp thiết hiện nay. Nếu
giải quyết được vấn đề này chúng ta sẽ loại bỏ được một chướng ngại lớn trên con
đường tổng hợp thông tin của nhân loại.
Đề tài khóa luận đặt ra vấn đề tìm hiểu về trình thu thập thơng tin trên web và
bước đầu sẽ xây dựng một ứng dụng có khả năng tổng hợp thông tin tự động từ các
trang báo điện tử lớn. Đề tài nếu thành công sẽ là bước đi không nhỏ giúp cho việc
tổng hợp thông tin trở nên đơn giản hơn, giảm được nhiều chi phí cơng sức so với việc
tổng hợp thủ công, và là tiền đề để xây dựng nên một hệ thống máy tìm kiếm, giống
như google, cho người Việt Nam.
Nội dung của khóa luận sẽ tập trung vào các mục tiêu chính sau:
- Đưa ra được một cái nhìn tổng quát về trình thu thập web (web crawler)
- Xây dựng một ứng dụng website tổng hợp thơng tin có khả năng thu thập các
bản tin từ các trang báo lớn như Dân trí.
Để giải quyết được các mục tiêu này, khóa luận được chia thành ba chương lớn:
Chương 1: Tìm hiểu về trình thu thập web
Trong chương này, chúng ta sẽ lần lượt tìm hiểu các khái niệm cơ bản trong trình
thu thập web. Phần lớn nội dung trong chương này sẽ đi sâu vào việc tìm hiểu các
thành phần cấu thành nên một trình thu thập, các chiến lược thu thập dữ liệu, việc đánh
giá của trình thu thập đối với trang web. Qua đó chúng ta sẽ có một bức tranh chung
1



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 2010

về trình thu thập web, và có thể hiểu hơn về các giá trị thực tiễn mà nó mang lại trong
đời sống của con người.
Chương 2: Xây dựng ứng dụng website tổng hợp thông tin
Phần đầu chương sẽ trình bày về các kiến thức nền tảng và các công nghệ liên
quan, ở phần tiếp theo là các đánh giá phân tích và các giải pháp nhằm nâng cao hiệu
suất của trình thu thập, phần cuối chương là việc hiện thực hóa ứng dụng thơng qua
việc xây dựng hệ thống cơ sở dữ liệu và thiết kế giao diện website. Cũng trong phần
này tôi sẽ nêu ra hai cách thu thập thông tin. Một là cách làm phổ biến hiện nay tôi gọi
là cách làm truyền thống, một là cách làm mới tơi tìm ra. Cách làm mới này tối ưu hơn
và có thể giải quyết được các hạn chế trong cách làm truyền thống.
Chương 3: Kết luận
Phần kết luận cũng là phần cuối của khóa luận sẽ nhìn lại những điều đã làm
được trong khóa luận này, nêu lên những vấn đề cịn vướng mắc, từ đó đề ra hướng
phát triển tiếp theo cho đề tài.

2


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 2010

CHƯƠNG 1. TÌM HIỂU VỀ TRÌNH THU THẬP WEB
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 nay tên gọi phổ biến nhất là
vẫn là trình thu thập web [1]. Mặc dù vậy cụm từ ‘thu thậ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ục ngà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ển củ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ểu kho lưu trữ có thể dùng để
phục vụ cho các ứng dụng cụ thể trong cơng cụ tìm kiế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. Khi ghé thăm một trang hạt giống, trình thu thập sẽ đọc nội dung trang web, lọc
ra tất cả các siêu liên kết (hyperlink) có trong trang web đó và đưa các URL tương ứng
với chúng vào một danh sách gọi là biên giới (frontier). Dựa vào danh sách này, trình
thu thập tiếp tục quá trình duyệt đệ quy để ghé thăm tất cả các URL chưa được duyệt.
Quá trình này chỉ dừng lại khi trình thu thập đã thu thập đủ số trang yêu cầ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 đến kết nối mạng, bẫy nhện, tiêu
chuẩn trích xuất URL, chuẩn hóa các trang HTML, bóc tách nội dung trang HTML
vv... Ở phần sau của khóa luận tơi sẽ lần lượt trình bày đến các vấn đề này và hướng
giải quyết của chúng.
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ưu và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 đây khơng cần thu thập
thêm. Tuy nhiên web là một thực thể năng động với các không gian con liên tục phát
triển và thay đổi nhanh một cách chóng mặt, vì thế thông tin phải liên tục được thu
thập để giúp các ứng dụng ln 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ặc cập nhật các trang bị sửa đổi.

3


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 2010


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óc tá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ột trang web.
Về bản chất, q 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ên trong nó tương tự như
việc mở rộng tìm kiếm một đỉnh trong đồ thị. Việc tìm kiếm này là khác nhau trong
các trình thu thập sử dụng chiến lược tìm kiếm khác nhau. Phần sau của khóa luận tơi
sẽ trình bày sâu hơn về các chiến lược tìm kiếm và đưa ra các số liệu thống kê để so
sánh hiệu suất của các chiến lược tìm kiếm này từ đó rút ra đánh giá về hiệu suấ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 tồn bộ hệ thống search engine.
Mục đích chung của các hệ thống search engine là số lượng trang web đầu vào đạt giá
trị cao nhất có thể, trong đó trình thu thập web làm cơng việc chí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 dựa vào các phương pháp dựa trên kinh nghiệm (heuristic). Ngồi ra,
chúng ta có thể sử dụng trình thu thập web để xây dựng các phần mềm tập trung thông
tin, các trang web tổng hợp thông tin, dựa trên cơ chế tự động tìm và phát hiện tài
nguyên.
1.2. CÁCH XÂY DỰNG MỘT HẠ TẦNG THU THẬP
Hình 1 cho ta thấy một chu trình của một trình thu thập web cơ bản [1]

4



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 2010

Hình 1 : Một vịng thu thập web cơ bản

Trình thu thập chứa một danh sách các URL chưa được thăm gọi là biên giới
(frontier). Danh sách được khởi tạo bởi một số các URL hạt giống – các URL 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.

5


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 2010

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 thu thập sẽ chấm dứt
ngay khi trình thu thập đạt đủ số lượng trang nhất định hoặc frontier rỗng, đây được
gọi là trạng thái kết thúc (dead-end) của trình thu thập.
1.2.1. Frontier
Frontier là một danh sách chứa các URL của các trang chưa thăm. Trong thuật
ngữ tìm kiếm đồ thị, frontier là một danh sách mở các đỉnh chưa được mở rộng. Đối
với một trình thu thập lớn frontier có thể chứa hàng chục ngàn đến hàng trăm ngàn

trang và phải lưu trữ trong ổ cứng. Tuy vậy frontier nào cũng có một miền giới hạn
nhất định, miền giới hạn này lớn hay nhỏ phụ thuộc vào bộ nhớ của máy tính. Khi số
lượng URL thu thập được vượt quá giới hạn này chúng ta sẽ cần một cơ chế để loại bỏ
các URL ứng với các trang í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
10000 trang, 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 (viết tắt của First
In First Out, [6]) nghĩa là vào trước ra trước trong trường hợp chúng ta sử dụng thuật
tốn tìm kiếm theo chiều rộng để thu thập thơng tin. Trình thu thập sử dụng chiến thuật
tìm kiếm này gọi là trình thu thập theo chiều rộng [5]. 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 đảm bảo các URL chỉ được lấy
một lần. Để tìm kiếm xem một URL mới được trích xuất đã có trong danh sách chưa là
khá phức tạp vì số lượng trang là rất lớ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ới URL là khóa [8]. Hàm băm này sẽ sinh ra các giá trị băm tương ứng
với mỗi URL. 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ông mấ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 vì
tuy là tốn bộ nhớ hơn nhưng tốc độ tìm kiếm lại được cả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ến hành quá trình thu
6


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 2010

thập trang tương ứng thay vì việc lấy tất cả URL trong trang này trình thu thập sẽ chỉ

lấy URL chưa thăm đầu tiên và thêm vào frontier.
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 tốn tìm kiếm theo lựa chọn tốt nhất [5]. Trình thu thập sử dụng chiến 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ảng với các phần tử là
các URL được sắp xếp theo điểm đánh giá. Điểm đánh giá này được xác định dựa trên
một số các phương pháp dựa trên kinh nghiệm (heuristic). Trình thu thập ưu tiên sẽ
làm việc theo cơ chế sau: URL được lấy ra khỏi frontier để tiến hành thu thập luôn là
URL tốt nhất. Sau khi thu thập trang tương ứng, các URL được trích xuất ra được đưa
vào frontier và các danh sách URL được sắp xếp lại theo điểm đánh giá. Để tránh việc
trùng lặp URL chú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 được lấ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ết thú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.
Nhiều khi một trình thu thập có thể bắt gặp một bẫy nhện (spider trap, [3]) dẫn
nó đến một lượng lớn các URL khác nhau nhưng trỏ đến cùng một trang web. Một
cách để giảm bớt vấn đề này là hạn chế số lượng trang mà các trình thu thập truy cập
từ một tên miền nhất định. Các mã liên kết với frontier có thể đảm bảo rằng trong một
chuỗi liên tiếp các URL (khoảng 100 URL) trong frontier sẽ chỉ chứa một URL từ một
tên miền máy chủ (ví dụ như www.cnn.com). Như vậy trình thu thập sẽ tốt hơn bởi
khơng truy cập vào cùng một trang quá thường xuyên và các trang được thu thập cũng
có xu hướng đa dạng hơn.
1.2.2. Lược sử và kho lưu trữ trang
Lược sử thu thập dữ liệu [1] là một danh sách đánh dấu theo thời gian các URL
đượ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à đánh giá 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á quan trọng nhằm tránh các trang bị thăm lại và
7


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 2010

tránh thêm việc thu thập lại các trang 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ước khi đư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. Trong trườ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ột và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. Ví dụ ta có thể sử
dụng hàm băm MD5 [8] cung cấp một mã băm 128 bit cho mỗi URL. Giá trị băm 128
bit sau đó được chuyển đổi sang hệ thập lục phân (hecxa) 32 ký tự để lấy ra tên file. Ví
dụ nội dung của được lưu trữ trong một tập tin tên là
160766577426e1d01fcb7735091ec584. Bằng cách này chúng ta có độ dài tên tập tin
ln cố định cho dù có bao nhiều URL đi nữa. Tất nhiên nếu chỉ 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ản hơn. Trong một số trường hợp các
kho lưu trữ trang cũng có thể dùng để kiểm tra xem một URL đã được thu thập hay
chưa trước khi chuyển đổi sang tên tập tin 32 ký tự. Trong những trường hợp này có
thể bỏ đi cấu trúc dữ liệu lược sử.
1.2.3. 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 [4]. Client cần có thời
gian trễ để đảm bảo rằng không bị mất thời gian không cần thiết vào các máy chủ

chậm hoặc đọc các trang lớn. Trong thực tế chúng ta thường hạn chế vấn đề này bằng
cách cho client tải về khoảng 10-20 KB đầu tiê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ấy trang vì chúng ta phải đối phó với hàng triệu
máy chủ. Trong quá trình lấy trang, 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
động thu thập. Tiêu chuẩn loại trừ robot (Robot Exclusion Protocol, [13]) ra đời.

8


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 2010

1.2.3.1. Tiêu chuẩn loại trừ robot
Tiêu chuẩn này cung cấp cho người quản trị Web (Webmaster) một cơ chế xác
định các tập tin mà khơng cần truy cập bằng trình thu thập. Để làm được điều này,
trình thu thập (robot) duy trì một tập tin có tên là robot.txt [13] trong thư mục gốc của
các máy chủ web (ví dụ như . Tệp tin này chứa
hồn tồn nội dung văn bản text (khơng phải HTML). Robot.txt cho phép Webmaster
định ra các thành phần với quyền hạn riêng biệt cho từng robot. Nói cách khác thông
qua tệp tin này, Webmaster sẽ giao tiếp với robot để điều khiển tác vụ của các robot
này. Nó gồm 2 trường là trường User-agent và trường Disallow:
-

Trường User-agent: cho biết robot nào sẽ bị kiểm soát.
Trường Disallow: cho biết robot có được phép kết nối vào URL hay khơng.

Sau đây là các ví dụ minh họa việc sử dụng file robot.txt [13]:


Cú pháp

User-agent:*
Disallow:

Ghi chú cho Webmaster
Dấu (*) có nghĩa là áp dụng cho mọi robot.
Nhưng vì khơng có tài nguyên nào bị cấm nên tất cả
mọi thư mục đều được cho phép.

User-agent:*
Tất cả mọi robot đều có quyền truy cập tất cả các
Disallow: /cgi-bin/ thư mục trừ ba thư mục được trích dẫn phía sau.
Disallow:
/tmp/
Disallow: /private/
User-agent:
SpamBot
Disallow: /

Trường hợp này robot SpamBot bị cấm truy cập
tất cả thư mục. Dấu gạch chéo “/” có nghĩa là tất cả
các thư mục. User-Agent có thể là ký tự đơn và các
robot không phần biệt chữ hoa và chữ thường.

User-agent:
SpamBot
Disallow:/
User-agent:*


SpamBot bị cấm truy cập tất cả tài nguyên.
Trong khi các robot khác được được truy cập tất cả trừ
thư mục “private”.

9


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 2010

Disallow: /private/

User-agent:
SpamBot
Disallow:
/tmp/
Disallow: /private/
Disallow:
/tailieu/canhan.html
User-agent:
*
Disallow:
/tmp/
Disallow: /private/

Không cho phép SpamBot dị các thư mục được
liệt kê phía sau : thư mục “tmp”, “private” và tệp tin
“canhan.html” trong thư mục “tailieu”.
Các robot tìm kiếm khác được dị mọi thứ trừ hai thư
mục “tmp” và “private”.


Nhược điểm của file robot.txt :
Người ta cho rằng việc liệt kê các trang hoặc các thư mục trong file robot.txt sẽ
là nguyên nhân thu hút sự chú ý và trở thành mục tiêu cho các hacker. Thực ra chuẩn
loại trừ robot chỉ là dấu hiệu cảnh báo, không phải là biện pháp cấm robot cho nên
việc tn theo hay khơng hồn tồn là vấn đề tự nguyện. Tuy nhiên vẫn có cách khắc
phục:
Tạo một thư mục chứa tất cả các file quan trọng.
-

Trường Disallow chỉ liệt kê tên thư mục vừa tạo.
Cấu hình server sao cho các trang không chứa đường dẫn đến thư mục này.

Đáng buồn trên thực tế cách này không đạt được kết quả mong đợi do một trong
các nguyên nhân sau :
-

Các server có robot khơng bị cấm có thể dẫn đường các robot bị cấm khác
đến những file này.
Các file quan trọng có thể nằm trong log file (file được tự do truy xuất).
Khi cấu hình lại server, admin có thể ‘quên‘ các thư mục này phải cấm
robot!

1.2.4. 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ình thu thập. Phân tích
10


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 2010


nội dung có thể là q trình khai thác hyperlink/URL đơn giản hoặc nó có thể bao gồm
q 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ội dung cũng có thể bao gồm các bước
chuyển đổi URL được trích xuất thành dạ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ừ còn lại ở phần thân.
1.2.4.1. 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 cung cấ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ộc tí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ột trang. Điều này là quan trọng để tránh lấy một trang
nhiều lần. Đâ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.
Ví dụ, HTTP://www.COLTECH.vnu.edu.vn chuyển đổi thành
.
• Loại bỏ phần ‘tham khảo’ trong URL.
Ví dụ, chuyển đổi thành
/>• 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.
Ví dụ, và />%7Epant/ là 2 URL cùng dẫn đến một trang.
• Đối với một vài URL, thêm ký tự ‘/’. Ví dụ, và
cùng nối tới một dạng chuẩn. Quyết định thêm
‘/’ sẽ cần heuristic trong nhiều trường hợp.
• Sử dụng các heuristic để nhận ra các trang web mặc định. Những tên file như
index.html hoặ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.
Ví dụ, đường dẫn /%7Epant/BizIntel/Seeds/../ODPSeeds.dat được chuyển

thành
11


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 2010

/%7Epant/BizIntel/ODPSeeds.dat.
Điều quan trọng là đảm bảo tính nhất quán trong khi áp dụng các luật chuẩ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. Trước đây có một vấn đề hóc búa đặt ra cho các
trình thu thập là bẫy nhện. Kỹ thuật phổ biến của bẫy nhện là tạo ra các cấu trúc đường
dẫn sau vơ hạn.Ví dụ, />Các URL giả tạo ra bởi bẫy nhện tăng lên cực nhanh. Có một cách để ngăn chặn
là giới hạn kích thước URL cỡ 128 hoặc 256 ký tự.
1.2.4.2. 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 dung bất kỳ
trong một trang web bằng cách kiểm tra phạm vi thẻ tag HTML chứa chú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, [8]) 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 trên cây này và chỉ lấy ra phần nội
dung mà nó cần. Hình 2 cho ta thấy một mơ hình cây tương ứng với một mã nguồn
URL [1]

Hình 2: Mơ hình cây tương ứng với một mã nguồn HTML

12


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 2010

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 quy chuẩ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 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:

Cộng hòa xã hội chủ nghĩa Việt Nam <i>
Độc lập tự do hạnh
phúc

</i>
Vì vậy trước khi lập mơ hình cây cho một mã nguồn HTML chúng ta cần một
quá trình chuyển đổi các tài liệu HTML tồi thành các tài liệu HTML tiêu chuẩn, q
trình này gọi là chuẩn hóa các trang HTML. Quá trình này bao gồm việc chuyển đổi
các thẻ sang dạng chữ thường, chèn thêm các thẻ bị và sắp xếp lại thứ tự các thẻ trong
tài liệu HTML [10]. Chuẩn hóa trang HTML là rất cầ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ơng cầ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 đơn giản. Trình bóc tách như vậy cũng được hỗ trợ trong nhiều
ngơn ngữ lập trinh.
1.2.5. Trình thu thập đa luồng
Mỗi vịng thu thập tuần tự chiếm một lượng lớn thời gian, trong khi đó một
trong hai cái là CPU hoặc mạng lại nhàn rỗi: CPU nhàn rỗi (trong khi truy cập mạng)
hoặc mạng nhàn rỗi (trong các hoạt động của CPU). Việc xử lý đa luồng với mỗi
luồng là một vòng thu thập, có thể giúp cho việc tăng tốc độ hợp lý và sử dụng hiệu
quả băng thơng sẵn có. Hình 3 chỉ ra một phiên bản đa luồng [1] của trình thu thập cơ
bản trong hình 1:

13



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 2010

Hình 3: Một mơ hình trình thu thập đa luồng
Mơ hình đa luồng là mơ hình làm việc gồm nhiều luồng trên cùng một frontier
với mỗi luồng là một vịng thu thập. Chính vì thế cần một cơ chế đồng bộ để tránh việc
xung đột khi các luồng cùng tiến hành quá trình thu thập trên một frontier. Cơ chế này
như sau:
-

Luồng đầu tiên bắt đầu bằng cách khóa frontier để chọn URL tiếp theo cho
quá trình thu thập dữ liệu.
Sau khi lấy ra một URL, nó sẽ mở khóa frontier cho phép các luồng tiếp
theo truy cập vào frontier.
Frontier lại bị khóa lại để những URL mới được thêm vào.

Các bước khóa này là cần thiết để đồng bộ hóa việc sử dụng frontier khi mà
frontier bị chia sẻ bởi nhiều vòng thu thập. Chú ý rằng một trình thu thập thơng thường
sẽ duy trì một cấu trúc dữ liệu lược sử phục vụ cho việc tra cứu nhanh các URL đã
14


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 2010

được thu thập. Do đó ngồi các frontier thì việc đồng bộ hóa các truy cập vào lược sử
là điều cần thiết.
Các mơ hình trình thu thập đa luồng cũng cần phải đối phó với các frontier rỗng
giống như một trình thu thập theo tuần tự. Tuy nhiên đây là vấn đề không đơn giản.
Nếu một luồng phát hiện ra frontier rỗng, nó khơng tự động hiểu là tồn bộ trình thu
thập đã đến trạng thái kết thúc. Nó có thể cho rằng các luồng khác đang lấy trang và có
thể thêm các URL mới trong tương lai gần. Một cách để giải quyết với tình trạng này

là đặt một luồng một trạng thái chờ khi frontier bị khóa. Khi hết thời gian chờ nó sẽ
kiểm tra lại frontier. Sẽ có một bộ kiểm tra chịu trách nhiệm theo dõi số luồng đang ở
trạng thái chờ tại thời điểm hiện tại. Chỉ khi tất cả các luồng đều trong trạng thái chờ
thì khi đó trình thu thập sẽ dừng lại.
1.3. CÁC CHIẾN LƯỢC THU THẬP DỮ LIỆU
Trong phần này chúng ta sẽ thảo luận về một số chiến lược thu thập dữ liệu [5]
bao gồm :
-

Chiến lược thu thập dữ liệu theo chiều sâu.
Chiến lược thu thập dữ liệu theo chiều rộng.
Chiến lược thu thập dữ liệu theo ngẫu nhiên.
Chiến lược thu thập dữ liệu theo lựa chọn tốt nhất ngây thơ.

Như đã nói ở phần trước về bản chất, quá trình thu thập web chính là q 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. Chính vì thế các chiến 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ếm trên đồ thị. Các thuật tố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 tốn tìm kiếm bằ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 tốn tìm kiế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 tốn tì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 đó.


-

15


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 2010

1.3.1. Chiến lược thu thập dữ liệu theo chiều sâu
Quá trình thực hiện:
Bướ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ác liê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.3.2. Chiến lược 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.
16


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 2010


Bước 4: Đánh dấu trang này đã được thăm. Bóc tách trang và tìm các liê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.3.3. Chiến lược thu thập dữ liệu theo ngẫu nhiên
Quá trình thực hiệ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ác liê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.3.4. Chiến lược thu thập dữ liệu theo lựa chọn tốt nhất ngây thơ.
Chiến lược thu thập dữ liệu theo lựa chọn tốt nhất ngây thơ (Naive Best-First,
[1]) sử dụng thuật tốn tìm kiếm theo lựa chọn tốt nhất theo quy tắc tính điểm số cho
các URL. Điểm số của một URL được tính bằng phương pháp độ tương đồng cosin
(cosine similarity, [6]) của trang web tương ứng và truy vấn mà người dùng đưa ra. Độ
tương đồng cosin là phương pháp tính giá trị tương đồng giữa 2 vectơ n chiều bằng
cách tìm cosin góc giữa chúng, phương pháp độ tương đồng cosin thường được dùng
17


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 2010

để so sánh một truy vấn với một trang văn bản. Độ tương đồng cosin của trang p và
truy vấn q được tính bằng công thức:
vp*vq
Độ tương đồng (p,q) = cos(vp,vq) = ||v ||*||v ||
p
q
Trong đó vp,vq là các vecto đại diện được tính dựa trên tần số phát sinh (term
frequency, [6]). Tần số phát sinh có thể hiểu là số lần xuất hiện của các từ truy vấn q
trong trang p.
vp*vq là tích vô hướng của 2 vectơ; ||v|| là giá trị độ dài Euclid của vectơ v.

Nếu độ tương đồng (p,q) = -1 tức là khác nhau tuyệt đối
Nếu độ tương đồng (p,q)= 0 tức là độc lập với nhau
Nếu độ tương đồng (p,q)= 1 tức là chính xác tuyệt đối
0 < độ tương đồng (p,q) < 1 tức là trang p có liên quan đến truy vấn q
-1< độ tương đồng (p,q) < 0 tức là trang p khơng có liên quan đến truy vấn q
Quá trình thu thập dữ liệu dùng trong trình thu thập tuần tự được thực hiện như
sau :
Bước 1: Sắp xếp các URL theo thứ tự giảm dần điểm số. Lấy ra URL đầu tiên
trong danh sách.
-

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ác liê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.
18


×