1 Nutch = Crawler + Indexer/Searcher Lucene + GUI/Plugins/MapRedce/Distribited File System Hadoop Một số ưu điểm chính của Nutch: • Tính trong suốt: Các máy tìm kiếm trên thị trường khôn
Trang 1TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG
──────── * ───────
BÁO CÁO PROJECT I
Đề tài : Xây dựng một Crawler
Sinh viên thực hiện : Bùi Văn Toàn Lớp : CNTT2 – K54
Giảng viên hướng dẫn : Trần Đức Khánh
Hà Nội, tháng 12 năm 2011
Trang 2LỜI NÓI ĐẦU
Mục tiêu của báo cáo:
- Nhằm củng cố, bổ sung, tăng cường kiến thức, kĩ năng xây dựng và phát triển
- Tổng kết những vấn đề đã thực hiện được và chưa thực hiện được để tiến hành rút ra những kinh nghiệm
Em xin gửi lời cảm ơn tới thầy Trần Đức Khánh vì đã tạo rất nhiều điều kiện thuận lợi trong học phần ProjectI này !
Trang 3MỤC LỤC
Lời mở đầu:
Phần I : Cơ Sở Lý Thuyết……… …4 Chương III : Cài đặt công cụ tìm kiếm theo lĩnh vực chuyên sâu
3.1 Phương hướng cài đặt hệ thống tìm kiếm ……… 4
3.2 Kiến trúc của Nutch……… 5
3.3 Hoạt động của Nutch crawler……… … 6
Phần II: Cài Đặt Một WebCrawler
2.1 Yêu cầu bài toán ……… 14 2.2 Chi tiết cài đặt……….14 Kết luận :
Trang 4Phần I : CƠ SỞ LÝ THUYẾT
Chương III
CÀI ĐẶT THỬ NGHIỆM CÔNG CỤ THU THẬP THÔNG TIN THEO LĨNH VỰC CHUYÊN SÂU
3.1 Phương hướng cài đặt hệ thống tìm kiếm thông tin theo lĩnh vực chuyên sâu
Để thực hiện cài đặt hệ thống tìm kiếm thông tin theo lĩnh vực chuyên sâu như ý tưởng đã trình bày trong chương II, nhóm SE2010 chúng tôi đã lựa chọn Nutch Bởi Nutch là thư viện mã nguồn mở trên nền Java do Apache Foundation phát triển nhằm đơn giản hóa việc xây dựng một máy tìm kiếm
Sử dụng Nutch Người dùng có thể tạo ra một máy tìm kiếm cho riêng mình với đầy đủ các thành phần: Thu thập tài liệu, đánh chỉ mục, tìm kiếm dựa trên câu truy vấn, giao diện người dùng.
Nutch phát triển dựa trên hai bộ thư viện mã nguồn mở nổi tiếng của Apache là Lucene và Hadoop (1)
Nutch = Crawler + Indexer/Searcher (Lucene) + GUI/Plugins/MapRedce/Distribited File System (Hadoop)
Một số ưu điểm chính của Nutch:
• Tính trong suốt: Các máy tìm kiếm trên thị trường không tiết lộ với người dùng về giải thuật được xây dựng bên trong đặc biệt là giải thuật Ranking các trang kết quả Với Nutch, người dùng không chỉ có thể xem các giải thuật mà còn có thể can thiệp hoặc viết lại các giải thuật đó.
1
Trang 5• Tính mở: Bằng việc chỉnh sửa giải thuật được cài đặt, Nutch có thể trở thành một máy tìm kiếm theo chủ đề.
• Tính tận dụng: Như mọi hệ thống mã nguồn mở khác, sử dụng Nutch là việc kế thừa thành quả lao động của cộng đồng giúp tiết kiệm thời gian
và công sức phát triển.
• Tích hợp: Nhiều công nghệ tiến tiến liên quan đến xử lý văn bản và có thể xử lý dữ liệu lớn (scalability) đã được tích hợp trong Nutch.
3.2 Kiến trúc của Nutch
Kiến trúc của Nutch Error: Reference source not found được minh họa bởi hình 3.1 Hệ thống Nutch sử dụng một kho dữ liệu về các trang web (web db) để lưu trữ địa chỉ tất cả các trang web đã biết và các link nằm trong các trang đó Web db cung cấp địa chỉ các trang sẽ được lấy về cho bộ download dưới dạng một danh sách địa chỉ (fetch list) Bộ download (fetcher) gồm nhiều thành phần hoạt động song song có thể download đồng thời nội dung của nhiều trang nhằm tận dụng băng thông Dữ liệu lấy về được cập nhật vào trong web db để phục vụ cho việc tạo ra các fetch list tiếp theo.
Sau khi hoàn thành quá trình lấy dữ liệu từ Internet, bộ đánh chỉ mục (Indexer) tiến hành đánh chỉ mục và sắp xếp Giao diện người dùng trên các máy chủ web (web server) đưa câu truy vấn vào bộ tìm kiếm (searcher) để tìm kiếm trên dữ liệu đã đánh chỉ mục và trả lại kết quả cho người dùng (2)
2
Trang 6Hình 3.: Kiến trúc một máy tìm kiếm dựa trên Nutch.
Theo kiến trúc này thì Crawler, Indexer, Searcher hoạt động độc lập và chỉ phụ thuộc về mặt dữ liệu Điều này cho phép chúng ta thay đổi cách thức hoạt động của từng thành phần mà không ảnh hưởng tới thành phần khác (3)
3.3 Hoạt động của Nutch crawler
Crawler hoạt động theo từng chu kỳ, tổng số chu kỳ gọi là độ sâu (depth) trong một lần thu thập thông tin Mỗi chu kỳ sẽ có tối đa N tài liệu được lấy
về Theo cấu hình của Nutch thì
18
10 2 9
0 < N < . ×
Crawler hoạt động qua 5 bước và được minh họa bởi Hình 3 (4) :
1: Ịnject: Bắt đầu với một số trang hạt giống được "tiêm" vào cơ sở dữ liệu link (CrawlerBD);
2: Generate: Lấy ra các link cần duyệt từ CrawlDB và cho vào hàng đợi (Fetch list);
3: Fetch: Lấy về nội dung của các trang trong fetch list;
3
4
Trang 74: Parse: Đọc nội dung đã được lấy về để trích rút ra các link mới và nội dung các link dưới dạng text đơn thuần;
5: Update: Cập nhật CrawlerDB với các link đã được trích rút ở bước 4.
Bước 2 đến bước 5 được lặp lại cho đến khi đạt được độ sâu cần thiết hoặc số lượng tài liệu theo ý.
Hình 3.: Sơ đồ hoạt động của crawler.
3.3.1 Cấu trúc thư mục làm việc của Nutch
Một phiên làm việc của Nutch được lưu trữ dưới dạng cây thư mục (Hình 3.) Trong đó:
a CrawlerDB
CrawlerDB là cơ sở dữ liệu về các trang đã biết và đã được duyệt Crawler lưu trữ thông tin về từng trang như: trạng thái, thời gian của lần duyệt cuối cùng, lấy về có thành công không, khoảng thời gian giữa hai lần duyệt, mã hóa nội dung của trang, CrawlerDB được tổ chức dưới dạng map file gồm các bản ghi có trường
um CrawlerDat ,
URL
, URL sử dụng kiểu dữ
Trang 8liệu text của Hadoop để lưu trữ địa chỉ của trang CrawlerDat um là một lớp của Nutch để lưu trữ trạng thái của một trang gồm có các thông tin ở trên.
CrawlerDB được khởi tạo bởi Ịnjector Ịnector đơn giản chỉ chuyển một tệp văn bản chứa các trang hạt giống (seed URL) sang dạng map file
Crawler
,
URL
Trong quá trình thu thập tài liệu, Crawler được cập nhật sau mỗi chu kỳ bằng các địa chỉ đã được lấy về và các địa chỉ mới được trích rút ra.
Hình 3.: Cấu trúc thư mục làm việc của Nutch Crawler.
b LinkDB
LinkDB lưu trữ thông tin về đồ thị link sau khi một phiên làm việc kết thúc LinkDB được tổ chức dưới dạng map file
Inlinks ,
URL
trong đó Inlinks
là một lớp của Nutch chứa danh sách các địa chỉ và anchor text trỏ tới URL
LinkDB không có sẵn mà được tạo ra bằng cách sử dụng mô hình MapReduce của Hadoop LinkDB rất có ích trong việc huấn luyện cho crawler hoặc tính độ quan trọng của một trang tài liệu (page ranking).
Trang 9c Segments
Mỗi segment lưu trữ dữ liệu của một chu kỳ Mỗi segment sẽ được lưu trữ vào trong một thư mục có tên được ghi theo dạng năm-tháng-ngày-giờ-phút-giây Chẳng hạn, một chu kỳ bắt đầu làm việc vào lúc 11 giờ 20 ngày 10 tháng 5 năm 2010, khi đó dữ liệu của chu kỳ này sẽ được chứa trong một thư mục có tên: 20100510112036 Mỗi segment chịu trách nhiệm thu thập một tập các trang và trích rút ra các thông tin cần thiết Segment được tổ chức với các thư mục con như sau:
Content:
Chứa dạng dữ liệu gốc (raw) của các trang được lấy về, được tổ chức dưới dạng map file
Content ,
URL
Content là một lớp của Nutch chứa thông tin dưới dạng gốc của một trang.
Crawl_generate:
Chứa danh sách địa chỉ các trang được lấy về trong chu kỳ làm việc này Danh sách được lấy ra từ crawlerDB bởi Generator và được tổ chức dưới dạng file tuần tự
CrawlDatum ,
URL
.
Crawler_fetch:
Chứa thông tin về các địa chỉ trong crawl _ generate sau khi lấy về, được lưu trữ dưới dạng map file
CrawlDatum ,
URL
Danh sách URL trong crawl _ fetch giống như trong crawl _ generate chỉ có CrawlDatum được cập nhật các thông tin về việc download có thành
Trang 10công hay không, thời gian download, Thông tin trong crawl_fetch chính là thông tin dùng để cập nhật cho CrawlDB sau mỗi chu kỳ.
Crawl_parse:
Được tổ chức dưới dạng file tuần tự
CrawlDatum ,
URL
, là các địa chỉ mới được lấy ra sau quá trình trích rút các trang mới được lấy về Thông tin về các trang mới này được bổ sung vào cho CrawlDB để mở rộng cơ sở dữ liệu link phục vụ cho các chu kỳ hoạt động sau.
Parse_date:
Lưu trữ dạng map file
ParseData ,
URL
ParseDate là một lớp của Nutch lữu trữ thông tin ( URL , anchor text ) về các out-link xuất phát từ
URL Các out-link này đồng thời được lưu trữ trong crawl _ parse Anchor text của các out-link là cơ sở để "nhìn trước" tiềm năng trong quá trình thu thập thông tin.
Parse_text:
Các trang khi đã được tải về và cắt bỏ hết thông tin thừa chỉ còn lại là dạng văn bản Lưu trữ dạng map file
ParseText ,
URL
, trong đó ParseText
chứa dạng văn bản của URL.
d Index và Indexes
Trang 11Hai thư mục này sinh ra sau khi quá trình đánh chỉ mục được thực hiện Hai thư mục này chứa các chỉ mục trỏ tới dữ liệu trong các segment cụ thể.
3.3.2 Phiên làm việc của Nutch Crawler
Hình 3.: Phiên làm việc của Nutch Crawler
Phiên làm việc của Nutch Crawler (Hình 3.), Error: Reference source not found: Đầu tiên, Injector khởi tạo một danh sách trang hạt giống vào CrawDB Sau đó, mỗi chu kỳ tạo một thư mục dành riêng cho segment và đều lặp lại các bước sau:
1: Generator sử dụng CrawlDB để lấy ra N địa chỉ có đủ điều kiện (chưa download lần nào hoặc download lần cuối vượt quá khoảng thời gian giữa hai lần download định trước, ) Những địa chỉ này được chuyển vào thư mục con crawl _ generate và chờ để được download.
2: Fetcher là bộ có chức năng download một cách song song đa luồng nhiều địa chỉ cùng lúc Có nhiều fetcher cùng hoạt động Mỗi fetcher chịu trách nhiệm download một địa chỉ tại một thời điểm Các fetcher được cấp phát
Trang 12địa chỉ bởi queue feeder, một lớp của Nutch có nhiệm vụ kiểm soát tốc độ download, số fetcher hoạt động trên một máy chủ đề tránh vô tình làm sập máy chủ.
Nội dung gốc của các trang lấy về được lưu trữ trong thư mục content Ngoài ra, tình trạng của các địa chỉ được lấy về có thành công hay không được cập nhật và ghi lại vào thư mục crawl _ fectch
3: Parse lấy nội dung gốc của từng trang và phân tích để trích rút ra định dạng văn bản của trang đó, các địa chỉ mới Định dạng văn bản của từng trang được lưu trữ tại parse _ text Các địa chỉ mới được lưu trữ trong
parse
_
crawl
Cấu trúc out-link được lưu trữ tại parse _ data
4: Updater sử dụng crawl _ parse cập nhật thông tin về các trang được download và bổ sung địa chỉ mới vào CrawlDB, CrawlDB mới sẽ phục vụ cho việc tạo ra danh sách địa chỉ cần download cho một segment mới.
Kết thúc quá trình thu tập thông tin, parse _ data của từng segment được sử dụng để tạo ra đồ thị link của toàn bộ các trang đã biết Tiếp theo, tất cả các segment cung cấp thông tin cho quá trình đánh chỉ mục.
3.3.3 Phiên làm việc của Nutch Crawler có ứng dụng học tăng cường
Tương tự như phiên làm việc của Nutch crawler như đã trình bày ở
trên, nhưng ngay sau quá trình parse thì dữ liệu của parse _ data và
text
_
parse
sẽ được đưa vào khối tiền xử lý của modul tách từ tiếng Việt (tách câu) Đầu ra của modul tách từ tiếng Việt sẽ được đưa vào khối tiền xử lý của
Trang 13modul phân loại văn bản bằng SVM Rồi thực hiện tính độ quan trọng của tài liệu và anchor text Kết quả tính toán này sẽ được đẩy vào modul điều khiển.
Nếu độ quan trọng của tài liệu và anchor text được quan tâm (đúng chủ đề) thì cho phép thực hiện các bước: Fetcher; Parse và Updater như đã biết với phiên làm việc của Nutch Crawler.
Nếu độ quan trọng của tài liệu và anchor text không đáng được quan tâm (khác chủ đề) thì bỏ qua Rồi tiếp tục vòng lặp khác.
Phiên làm việc này được minh họa trên Hình 3
Seed urls CrawlDb
Generator Segment N
Crawl_generate
Trang 14Crawl_fetch Content Crawl_parse Parse_data Parse_text Fetcher Parse segment Updater LinkDb LinkDb invertlinks
Injector
VnTokenizer
SVM
Indexer Lucene index
1 6 2 3
Đúng chủ đề
Đ
Tính độ quan trọng của tài liệu và anchor text
Trang 15Bỏ qua
S 4 5
Hình 3.: Phiên làm việc của Nutch Crawler có ứng dụng học tăng cường
Phần II : CÀI ĐẶT MỘT WEBCRAWLER
2.1 Yêu cầu bài toán :
Xây dựng Crawler hay còn gọi là bộ thu thập thông tin Nó là một trong 3 thành phần chính tạo nên bộ tìm kiếm : Crawler, Indexer và Searcher
2.2 Chi tiết cài đặt :
Thuật toán :
Đầu vào của người dùng : URL bắt đầu vào mong muốn
loại tập tin Thêm URL vào danh sách URL để tìm kiếm.
{
Di chuyển URL vào danh sách các URL đã được tìm kiếm Kiểm tra URL để đảm bảo giao thức của nó là HTTP
(if not, thoát ra khỏi vòng lặp , trở lại "while ").
dù có một tập tin robots.txt tại trang web này
bao gồm một tuyên bố " Không cho phép" (if có, thoát ra khỏi vòng lặp , trở lại "while ".)
if nó không phải là một tập tin HTML , thoát ra khỏi vòng lặp ,
Trang 16trở lại " while." Bước qua các tập tin HTML
{
Xác nhận URL của liên kết và làm cho robot chắc chắn là
danh sách hoặc danh sách đã tìm kiếm , thêm nó vào
Khác nếu đó là loại tập tin người dùng yêu cầu,
}
}
Chương trình chính : Về cơ bản giao diện của chương trình WebCrawler
Mô tả :
Trang 17- StartURL : Là seedURL phải có giao thức “http://’’
- Search limit : Giới hạn của các link đã được thăm
- Frontier : Các URL biên tức là tất cả các link lấy ra từ trang web đã và đang được thăm
- Visited URLs : Những trang URL đã được thăm và đã trích rút ra các link liên kết
- Các chức năng : Search , Stop , Clear( Clear Panel : Frontier , Visted URLs), Exit
Đầu vào : Là 1 URL phải có giao thức là “ http:// ”
Đầu ra sẽ : Là các link liên kiết phục vụ cho công đoạn Indexer và Searcher
Đánh giá :
- Chương trình cơ bản đáp ứng được yêu cầu của một WebCrawler
- Khi nhập vào 1 URL chương trình sẽ tìm tất cả các Link liên kết trong trang
đó và tiếp tục vòng lặp đến khi đáp ứng điều kiện đặt ra
Linh hoạt trong kiểm soát số lượng các link cần được viếng thăm ( có giới hạn các link kết quả tìm kiếm )
Trang 18KẾT LUẬN
Chương trình là sự nỗ lực rất nhiều của cá nhân em
Trong thời gian tìm hiểu có hạn nên không tránh khỏi những thiếu sót , rất mong được sự đóng góp của thầy giáo để chương trình được hoàn thiện hơn
Em xin chân thành cám ơn !