Web crawler là gì?
Web crawler có chức năng lấy thông tin từ website , trích xuất ra những thông tin người sử dụng cần, đồng thời cũng tìm những link có trong trang web đó và tự động truy cập vào những link đó.Các tên gọi khác của crawler là robot, bot, spider, worm, ant. Nhưng gần đây tên gọi crawler là thông dụng nhất.
Mô hình crawler đơn giản:
Chọn URL khởi đầuSử dụng HTML protocol để lấy trang webTrích xuất ra các link. Lưu lại trong queueLặp đi lặp lại bước 2,3
Cụ thể hơn, các module quan trọng của 1 crawler:
URL Frontier: chứa danh sách các URl chưa được lấyFetch module lấy các trang webDNS resolution module xác định địa chỉ của server của trang web đã lấyParsing module trích xuất text và link từ trang web đã lấyDuplicate elimination module loại bỏ các URL trùng lặp
Xây dựng web crawler với rails và mechanize
Ví dụ minh họa về việc lấy thông tin nhà đất từ trang http://nhadat24h.netCài đặt:
gem “mechanize”bundle installCrawl data:Khởi tạo đối tượng
agent = Mechanize.newLấy thông tin trang, trong trang này chúng ta sẽ có 1 danh sách các nhà đang được bán và cho thuê:
page = agent.get “http://nhadat24h.net/ban-bat-dong-san-viet-nam-nha-dat-viet-nam-s686599” + “/#{page_number}”Để lấy được thông tin từ từng page, chúng ta cần có được cấu trúc của trang:
Như các bạn có thể thấy, chúng ta có id của từng trường, vậy chúng ta có thể lấy như sau:
crawled_page = Mechanize.new.get room_url#get price crawled_page.at(“#ContentPlaceHolder2_lbGiaTien”).try :text#get areacrawled_page.at(“#ContentPlaceHolder2_lbDienTich”).try :textLấy thông tin chi tiết, chúng ta sẽ truy cập vào từng trang đã lấy ở trên để lấy thông tin chi tiết từng nhà:
room_url = “http://nhadat24h.net” + link.attributes<"href">.try :valuepage.search(“#ContentPlaceHolder2_KetQuaTimKiem1_Pn1
Chú ý:Thông thường, chúng ta sẽ lưu trữ số lượng khổng lồ thông tin sau khi crawl, vậy để có tốc độ đọc ghi cao, hiệu suất lớn và dễ mở rộng, chúng ta nên sử dụng MongoDB.Để tìm hiểu thêm về MongoDB các bạn có thể tham khảo tại: https://gocnhintangphat.com/tags/mongodb
Demo
Demo project về crawl thông tin nhà đất từ 2 trang http://www.muabannhadat.vn và http://nhadat24h.nethttps://github.com/otchoo/room_crawler/tree/develop