Input: Website hoặc web page Output: Text data Website spider sẽ tiến hành nhận Input là website hoặc web page web page gồm nhiều web page, xác định yêu cầu nội dung tìm kiếm, thu th
Trang 1sao chép dữ liệu cho website
GVHD: Th.s Trương Hoài Phan
Lớp: K09406
Vũ Thanh Tiến Dũng - K094061113 Nguyễn Thị Diệu Anh - K094061102
Hồ Chí Minh, Ngày 09 tháng 11 năm 2014
Trang 2Mục Lục
I Tổng quan đề tài 2
1 Lý do chọn đề tài 2
2 Mục tiêu 2
3 Đối tượng và phạm vi nghiên cứu 2
4 Phương pháp nghiên cứu 2
II Nội dung đề tài 3
A Lấy thông tin: 3
1 Cơ sở lý thuyết: 3
2. Mô tả quá trình hoạt động: 3
3 Cấu trúc Crawler-Web spider: 4
4 Xây dựngCrawler-Webspider đơn giản 7
B Phòng chống: 21
1 Hạn chế việc lấy link thông qua Sitemap 21
2 Hạn chế việc lấy link thông qua RSS 22
3 Hạn chế chức năng Crawler 22
4 Hạn chế chức năng Extractor 27
III Kết luận 30
Trang 3I Tổng quan đề tài.
1 Lý do chọn đề tài
Ngày nay công nghệ thông tin phát triển vượt trội, Internet phổ biến rộng rãi, kho tài nguyên trên Internet ngày càng thêm phong phú Mọi tài nguyên trên internet đa số đều thông qua các website, các website như là sợi dây kết nối mọi người lại với nhau, thông qua website mọi người có thể liên hệ, trao đổi, chia sẻ với nhau một cách nhanh chóng và hiệu quả Vì lẽ trên nội dung của website là hết sức quan trọng Đối với doanh nghiệp nó thậm chí được so sánh như là một tài nguyên và cần phải bảo vệ
Xuất phát từ nhu cầu thực tế đó, nhóm đã quyết định chọn đề tài các phương thức thu thập dữ liệu từ một website và cách phòng chống sao chép dữ liệu chowebsite để nghiên cứu
2 Mục tiêu
Tìm hiểu cách thức thu thập, tìm kiếm các liên kết trên website để lấy nội dung, cách bóc tách, xử lý dữ liệu thu thập được Từ đó tiến hành phòng chốngviệc lấy nội dung website
Tiến hành thu thập nội dung, và xử lý dữ liệu của một website thực tế Đồng thời xây dựng tạm một website để áp dụng cá biện pháp phòng chống đã tìm hiểu được
3 Đối tượng và phạm vi nghiên cứu
Đối tượng ngiên cứu của đề tài là việc tập trung nghiên cứu Cơ sở lý thuyết tổng quan về cách thức thu thập nội dung website
Phạm vi nghiên cứu áp dụng cho một website tin tức
4 Phương pháp nghiên cứu
Phương pháp bàn giấy: Nhóm thực hiện việc thu thập tài liệu qua Internet về cách thức tiến hành lấy nội dung và xử lý nội dung website Tài liệu sử dụng chủ yếu là các tài liệu tìm trên Google
Phương pháp thực nghiệm : Với phương pháp này, nhóm tiến hành thực hiện thực tế với website mẫu
Trang 4II Nội dung đề tài.
A Lấy thông tin:
1 Cơ sở lý thuyết:
Dựa trên mô hình tìm kiếm thông tin Crawler – Web Spider(CWS), CWS có khả
năng tìm kiếm và thu thập tài nguyên trên Internet (hình ảnh, email, số điện thoại, bài viết, tài liệu,…) tùy theo nhucầu
2 Mô tả quá trình hoạt động:Các công cụ CWS hoạt động dựa trên 1 chu trình
vòng lặp và có điểm dừng
Input: Website hoặc web page
Output: Text (data)
Website spider sẽ tiến hành nhận Input là website hoặc web page (web page gồm nhiều web page), xác định yêu cầu nội dung tìm kiếm, thu thập; xác định phạm vi hoạt động
Với các tiêu chí như trên, Web spider tiến hành điều khiển các robot (con bọ có chức năng tìm kiếm, thu thập) duyệt các trang web trong phạm vi xác định, requestđến Server và nhận Page source của mỗi trang về, sau đó tiếp tục quá trình hoạt động
Một bộ phận Web spider sẽ tiến hành nhận các Page source được trả về, xác định yêu cầu nội dung tìm kiếm, thu thập, tiến hành quá trình bóc tách dữ liệu
Đối với các Page source khớp với nội dung cần thu thập, sẽ được lưu vào
Database Ngược lại, nếu không khớp, tiếp tục vòng lặp tìm kiếm và thu thập đến khi khớp nội dung thì dừng lại
Trang 53 Cấu trúc Crawler-Web spider:
Cấu trúc của Crawler – Web Spider
Một CWS có 4 phần chính:
Thành phần giao diện người dùng điều khiển.(UI Control)
Thành phần Robot (tìm kiếm trang web)
Thành phần thu thập dữ liệu thô – Page source(Crawler)
Thành phần bóc tách dữ liệu (Extractor)
Trang 6Tìm kiếm theo chiều rộng
Tìm kiếm theo chiều sâu
Trang 7 Đối với tìm kiếm theo nội dung: sử dụng phương pháp vét cạn, lấy tất cả cácphần tử link liên kết trongnội dung thu thập được, tiếp tục mở rộng tìm kiếmnội dung sang các trang web khác, và quá trình dừng lại khi gặp điều kiện kếtthúc được đặt ra ở thành phần UI.
3.3 Thành phần thu thập dữ liệu thô (Crawler):
Thực hiện chức năng Request tới Web server đối với từng link liên kết, sau đó trả
Regular expression: Xác định điểm đầu và điểm kết thúc của nội dung cần thu thập
SubString: Xác định nội dung cần lấy bắt đầu từ vị trí nào và nội dung dài bao nhiêu chữ cái
4 Xây dựngCrawler-Webspider đơn giản
Trang 84.2 Xây
dựng Robot
Mục tiêu: duyệt các đối tượng có thể là một website hoặc chuỗi nhiều website
Các phương pháp tiếp cận: Sitemap, RSS, Link Onpage
o RSS
a Giới thiệu RSS
RSS (viết tắt từ Really Simple Syndication) là một tiêu chuẩn định dạng tài liệu dựa trên XML nhằm giúp người sử dụng dễ dàng cập nhật và tra cứu thông tin một cách nhanh chóng và thuận tiện nhất bằng cách tóm lược thông tin vào trong một đoạn dữ liệu ngắn gọn, hợp chuẩn
b Mô tả cách lấy link RSS
Tìm kiếm link RSS của trang web:
Sau khi xác định được link địa chỉ RSS của trang web, tiến hành gửi nội dung Page Source cho Crawler với yêu cầu trả về danh sách các địa chỉ liên kết.Một số ví dụ địa chỉ RSS:
Trang 9\" />”);
Return alcollect[1];
Cách 2: Xây dựng sẵn 1 thư viện các tên đường dẫn RSS thường hay sử dụng của website: /rss, /rss/feed/, /feed, /rss.xml, /*.rss…sau đó tiến hành lắp ráp thử từng địa chỉ với địa chỉ trang web, tiến hành chạy từnglink và kiểm tra xem địa chỉ nào có Content-Type bằng “text/xml”.Tạo mảng ar_rss chứa danh sách các đuôi RSS thườn gặp:
- Tạo mảng ArRSS chứa danh sách đuôi RSS
- Chạy vòng lặp ArRSS, cộng chuỗi các phần từ trong mảng với địa chỉ trangweb và đọc nội dung từng trang
- Kiểm tra, nếu ContentType của địa chỉ trang nào là text/xml gán cho biến Url_Rss
- Tạo mảng Array Listalcollect.
- Khai báo biến str kiểu String là biến chứa đường link của trang web.
- Gán biến str vào từng thành phần trong mảng alcollect.
- Dùng hàm Getreader để lấy nội dung trang web.
- Khai báo biến nd để chứa nội dung html đã lấy từ trang web khi dùng hàm
Getreader.
- Khai báo biến link dạng chuỗi có định dạng "href=\"(?<Link>.*?)\""
- Dùng hàm GetObject để lấy các dòng có cùng định dạng với biến link từ
chuỗi nội dung đã lấy về ở trên
- Gán các dòng link đã lấy vào mảng alcollect.
Trang 10- Dùng vòng lặp foreach lấy từng link trong mảng và sử dụng hàm
IsLinkWebite để loại bỏ các link ngoài
- Xóa các link sai, giữ lại các link đúng và add vào mảng alcollect.
string link = "href=\"(?<Link>.*?)\"";
alcollect = GCF.getObject(nd, link);
for (int i = 0; i < alcollect.Count; i++) {
String a = alcollect[i] as String;
bool b = GCF.IsLinkWebsite(str, a);
Trang 11g Nhược điểm
- Hiệu quả sử dụng thấp trong trường hợp có nhiều loại link khác nhau
- Chỉ áp dụng được cho các trang web hỗ trợ RSS, nên hạn chế trong việc lấylink của các trang web khác
- Tùy vào mỗi trang web mà địa chỉ RSS sẽ thay đổi nên việc xác định link RSS cũng gặp khó khăn
o Sitemap
a Giới thiệu Sitemap
Site map (sơ đồ của một website) là một danh lục liệt kê tất cả các mục thông tin trên trang web của bạn cùng sự mô tả ngắn gọn cho các mục thông tin đó
b Mô tả cách lấy link trên Sitemap
Xây dựng sẵn 1 thư viện các tên đường dẫn Sitemap thường hay sử dụng của website: /sitemap.xml, /sodo.xml, /sitemaps.xml,… sau đó tiến hành lắp ráp thử từng địa chỉ với địa chỉ trang web, tiến hành chạy từng link và kiểm tra xem địa chỉ nào có Content-Type bằng “text/xml”
Sau khi xác định được link địa chỉ Sitemap của trang web, tiến hành gửi nội dung Page Source cho Crawler với yêu cầu trả về danh sách các địa chỉliên kết
c Các bước thực hiện
- Hai cách mà nhóm đưa ra để xác định địa chỉ sitemap:
- Cộng thêm chuỗi “sitemap.xml” vào link website Sau đó xác định link đó
có tồn tại
- Dò tìm địa chỉ sitemap trong robots.txt Sau đó tiếp tục đọc nội dung khi đã
biết được địa chỉ sitemap
- Tạo mảng ar
- Dùng hàm Getreader để lấy nội dung trang web Và dùng hàm GetObject
để lấy ra chuỗi có định dạng "<loc>(.*)</loc>"trên nội dung đã đọc từ
return ar;
}
Trang 12a Giới thiệu Link Onpage:
Link OnPage là các liên kết trên trang HTML, liên kết đó là những liên kết dẫn tới 1 trang nào đó trên website Các link nào không bao gồm các link: hình ảnh, javascript, css
b Mô tả các lấy link Onpage:
Nhập địa chỉ của Website, tiến hành phân tích, lấy tất cả các Link Onpage trên trang đã nhập Lúc này ta lưu đường dẫn của trang đã phân tích vào 1 HashSet visited và những link lấy được từ trang đã phân tích vào 1 HashSet
Trang 13Unvisited Tiếp tục phân tích từng link một trong Unvisited cho tới khi nào hashset này không còn phần tử nào Lúc này, ta được hashset Visited lưu tất
cả các link của website
c Các bước thực hiện:
- Sử dụng DLL: HtmlAgilityPack
- Tạo mới 1 Class linkOnPage.cs gồm có 2 hàm chính:
o getAllLinksWebsite: nhận vào 1 URL trả về ArrayList chứa tất cả
các link của Website
o Nếu trong unvisited vẫn còn phần tử thì
Lấy phần tử đầu tiên trong unvisited đưa vào biến xurl
Xóa phần tử vừa lấy trong unvisited
Thêm phần tử vừa lấy vào visited
Load HTML của xurl và xét mỗi thẻ a trong HTML này
Nếu href chưa có trong visited thì thêm vào unvisited
o Nếu trong unvisited không còn phần tử nào thì thoát vòng lặp
Trả về visited chứa links của website
Code demo:
public static ArrayList getAllLinksWebsite(string url) {
ArrayList result = new ArrayList();
HashSet<string> unvisited = new HashSet<string>();
HashSet<string> visited = new HashSet<string>();
Trang 14HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(GCF.getreader(url));
foreach (HtmlNode link in
doc.DocumentNode.SelectNodes("//a[@href]")) {
HtmlAttribute att = link.Attributes["href"]; if (!visited.Contains(att.Value)) {
if (!att.Value.Contains("#") && att.Value.Contains(url)) {
unvisited.Add(att.Value); }
}
}
}
return result; }
o getAllLinksOnPage: nhận vào 1 url và trả về 1 HashSet chứa tất cả các link trên trang vừa truyền vào Code demo: public static HashSet<string> getAllLinksOnPage(string url) {
HashSet<string> result = new HashSet<string>(); HtmlDocument doc = new HtmlDocument(); doc.LoadHtml(GCF.getreader(url)); try {
foreach (HtmlNode link in doc.DocumentNode.SelectNodes("//a[@href]")) {
HtmlAttribute att = link.Attributes["href"]; if (!att.Value.Contains("#") && att.Value.Contains(url)) {
result.Add(att.Value); }
}
}
catch (Exception) {
}
return result; }
d Code demo
Trang 15e Ưu điểm:
- Có thể lấy được tất cả các link trên website nhập vào bất kỳ
- Dễ sử dụng
f Nhược điểm:
- Tốc độ chậm do thời gian phân tích mỗi trang để lấy link lâu
- Tùy thuộc vào “độ nặng” của mỗi trang phân tích mà cho ra kết quả nhanh hay chậm
- Xảy ra hiện tượng trùng lắp link trong quá trình thu thập nếu không có hàm kiểm tra
4.1.2 Các phương pháp: Http Web Request, Web Browser Control
o Phương pháp Http Web Request
a Mục tiêu: Request tới Web sever 1 địa chỉ trang webvà trả về nội dung HTML của trang đó
string webResponseStream = string.Empty;
HttpWebRequest request = null;
request = (HttpWebRequest)WebRequest.Create(url.Trim());
Trang 16// Set value for request headers request.Method = "GET";
StreamReader responseStream = null;
HttpWebResponse webResponse = null;
// Get response for http web request webResponse = (HttpWebResponse)request.GetResponse(); responseStream = new
} }
User Agent: Khai báo các thông tin chi tiết về trình duyệt sẽ được tạo ra để gửi tớiWebsever
Một số thông tin User Agent thường hay sử dụng:
- Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us)
AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B334b Safari/531.21.102011-10-16 20:23:50
- Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us)
AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B334b Safari/531.21.102011-10-16 20:23:10
- Mozilla/5.0 (Windows NT 6.1; WOW64; rv:7.0.1) Gecko/20100101
Firefox/7.0.12011-10-16 20:23:00
Trang 17- Mozilla/5.0 (Linux; U; Android 2.3.3; en-au; GT-I9100 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.12011- 10-16 20:22:55
- Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; InfoPath.2; NET CLR 2.0.50727; NET CLR 3.0.04506.648; NET CLR 3.5.21022; NET CLR
- Mozilla/5.0 (BlackBerry; U; BlackBerry 9800; en) AppleWebKit/534.1+
(KHTML, like Gecko) Version/6.0.0.337 Mobile Safari/534.1+2011-10-16
- Tốc độ nhanh, chậm phụ thuộc vào đường truyền Internet
- Có một số website chặn phương thức GET, ví dụ: www.5giay.vn,
www.giacaphe.com ,…và không trả về đúng nội dung HTML theo yêu cầu
- Nhận về đúng với nội dung Page source của trang web, có thể nội dung không như mong muốn: bị mã hóa, bị redirect sang trang khác, trả về kết quả null,…
o Phương pháp giả lập Web Browser
Trang 18a Mục đích: tạo 1 Web Browser phía Client để mô phỏng lại 1 trình duyệt web Thông qua Web Browser giả lập, ta có thể lấy được nội dung HTML theo yêu cầu.
b Mô tả: Nhập địa chỉ của 1 trang web vào Web Browser giả lập, sau đó thựchiện chức năng đọc nội dung Page source của hiện tại của Web Browser giảlập
4.2.1 Mục tiêu: Trả về đúng phần nội dung cần thu thập theo yêu cầu từ Robot
4.2.2 Mô tả: Sau khi lấy được Page source từ quá trình Crawler, Extractor xác định phần
nội dung cần lấy, thực hiện chức năng bóc tách và trả về kết quả
4.2.3 Phương pháp: Html Agility Pack, Regular expression, SubString
o Html Agility Pack
a Giới thiệu: Html Agility Pack là thư viện của NET, xây dựng cho nhu cầu xử lý văn bản html và trích xuất các phần tử DOM trong văn bản HTML, sửa lỗi và thao tác xpath, xlink, xpointer trên văn bản html
b Mô tả: Input là 1 nội dung HTML và điều kiện cần thu thập, Output là 1 chuỗi hoặc 1 văn bản
c Code demo
public static ArrayList getAllLinksWebsite_ Html Agility Pack(string PageSource) { ArrayList result = new ArrayList();
HtmlDocument doc = new HtmlDocument();
//get page source url
Trang 19foreach (HtmlNode link in doc.DocumentNode.SelectNodes("//a[@href]")){
HtmlAttribute att = link.Attributes["href"];
- Hỗ trợ nhiều chức năng được cung cấp bởi thư viện dll
- Trả về đúng thông tin theo yêu cầu
e Nhược điểm:
- Phương pháp này chỉ áp dụng được trên NET, hạn chế ngôn ngữ
o Regular expression (RE)
a Giới thiệu: RE là một ngôn ngữ mạnh dùng để mô tả và thao tác văn bản nâng cao RE được xác định bởi công thức quy tắc của chính bản thân nó Công thức quy tắc có chức năng so khớp với nội dung Page source và trả vềkết quả đúng theo với quy tắc này
b Mục tiêu: trả về 1 chuỗi con được trích xuất từ Page source
c Mô tả: getbetween_RE lấy nội dung Input là 1 Page source, xác định công
thức quy tắc so khớp và tiến hành bóc tách, trả về Output 1 hoặc nhiều kết quả được so khớp đúng cú pháp
d Code demo:
Lấy tất cả các thành phần nội dung khớp công thức quy tắc
public static ArrayList getObject(String content,String regex,int option=1) { ArrayList ar = new ArrayList(); ;
Regex regu = new Regex(regex);
MatchCollection Collect = regu.Matches(content);
foreach (Match abc in Collect) {
ar.Add(abc.Groups[option].Value.ToString().Trim());