PDA

View Full Version : Hỏi về thuật toán crawler website



jacklam86
27-11-2013, 11:02
Chào các bạn

Cho mình hỏi thuật toán làm 1 web crawler dữ liệu website như sau là thế nào?

Khi crawler trang web A, trên web A nếu có link web B thì qua crawler luôn web B. (Giống như Google vậy).

Thân

TND.VN
27-11-2013, 16:32
Bác hỏi trên nền gì mới là quan trọng.

Application hay Web Server

hostnaotot.com
27-11-2013, 16:47
Mình cũng tìm hiểu cái này khá nhiều.
Quan trọng nhất trong việc crawl website là bạn phải parse được trang để lấy được link tiếp theo đưa vào hàng đợi.
Để crawl toàn bộ web thì dùng hàng đợi thôi, first in first out, khi quét đc 1 page thì sẽ parse page đó để lấy link, kiểm tra trong hàng đợi đã có link đó chưa, nếu chưa có thì push vào.

Về thuật toán cơ bản là như thế.
Về công cụ: nếu bạn muốn làm để dùng, thì có sẵn 1 số công cụ opensource crawler, bạn cứ google "open source crawler" và lựa chọn 1 cái phù hợp để dùng
-Nếu bạn muốn tự lập trình, thì nên sử dụng 1 library hỗ trợ parse content để lấy link, mình giới thiệu 1 lib opensouce làm rất tốt điều này là jsoup. Còn việc xử lý lấy dữ liệu và hàng đợi là bạn phải lập trình.
Có gì ủng hộ site mình nhé: http://hostnaotot.com

jacklam86
28-11-2013, 07:41
Bác hỏi trên nền gì mới là quan trọng.

Application hay Web Server

Mình viết Web, bằng PHP

jacklam86
28-11-2013, 07:45
Mình cũng tìm hiểu cái này khá nhiều.
Quan trọng nhất trong việc crawl website là bạn phải parse được trang để lấy được link tiếp theo đưa vào hàng đợi.
Để crawl toàn bộ web thì dùng hàng đợi thôi, first in first out, khi quét đc 1 page thì sẽ parse page đó để lấy link, kiểm tra trong hàng đợi đã có link đó chưa, nếu chưa có thì push vào.

Về thuật toán cơ bản là như thế.
Về công cụ: nếu bạn muốn làm để dùng, thì có sẵn 1 số công cụ opensource crawler, bạn cứ google "open source crawler" và lựa chọn 1 cái phù hợp để dùng
-Nếu bạn muốn tự lập trình, thì nên sử dụng 1 library hỗ trợ parse content để lấy link, mình giới thiệu 1 lib opensouce làm rất tốt điều này là jsoup. Còn việc xử lý lấy dữ liệu và hàng đợi là bạn phải lập trình.
Có gì ủng hộ site mình nhé: http://hostnaotot.com

Hiện tại là mình parse qua nhưng lại chủ yếu dựa vào cấu trúc thẻ HTML để lấy các thông tin cần thiết. Tuy nhiên, mỗi web lại có cấu trúc khác nhau, đặt tên thẻ cũng khác nhau. Nên chỉ lấy được 1 trang duy nhất.

hostnaotot.com
28-11-2013, 09:08
Hiện tại là mình parse qua nhưng lại chủ yếu dựa vào cấu trúc thẻ HTML để lấy các thông tin cần thiết. Tuy nhiên, mỗi web lại có cấu trúc khác nhau, đặt tên thẻ cũng khác nhau. Nên chỉ lấy được 1 trang duy nhất.
E nghĩ bác ko nên viết từ đầu 1 parser, người ta đã làm rất nhiều rồi, mình ko nên làm lại từ đầu những cái đã có quá tốt.
Để làm việc: bác nên tham khảo jsoup, nó sẽ tự động parse link ra cho bác.
Để học tập: bác có thể đọc source jsoup để xem cơ chế parse theo CSS path của nó là như thế nào, có điều mã nguồn nó hơi bị to nhé.
Với php, bác có thể tham khảo thằng này: http://simplehtmldom.sourceforge.net/

hostnaotot.com
28-11-2013, 09:10
E nghĩ bác ko nên viết từ đầu 1 parser, người ta đã làm rất nhiều rồi, mình ko nên làm lại từ đầu những cái đã có quá tốt.
Để làm việc: bác nên tham khảo jsoup, nó sẽ tự động parse link ra cho bác.
Để học tập: bác có thể đọc source jsoup để xem cơ chế parse theo CSS path của nó là như thế nào, có điều mã nguồn nó hơi bị to nhé.
Với php, bác có thể tham khảo thằng này: http://simplehtmldom.sourceforge.net/

Hoặc thằng này dùng cho php cũng ngon

jacklam86
28-11-2013, 10:53
E nghĩ bác ko nên viết từ đầu 1 parser, người ta đã làm rất nhiều rồi, mình ko nên làm lại từ đầu những cái đã có quá tốt.
Để làm việc: bác nên tham khảo jsoup, nó sẽ tự động parse link ra cho bác.
Để học tập: bác có thể đọc source jsoup để xem cơ chế parse theo CSS path của nó là như thế nào, có điều mã nguồn nó hơi bị to nhé.
Với php, bác có thể tham khảo thằng này: http://simplehtmldom.sourceforge.net/

Cảm ơn hostnaotot nhiều. Mình sẽ nghiên cứu tiếp link bạn đưa.