Bài viết được sự cho phép của BBT Tạp chí Lập trình
Giới thiệu
Crawler là một công cụ giúp thu thập dữ liệu, thông tin từ các trang web khác nhau. Một trong những ví dụ về crawler mà chúng ta gặp hằng ngày là Google. Google là một hệ thống có nhiều máy chủ có thể crawling rất nhiều trang web trên Internet, từ đó chúng ta có thể tìm kiếm nội dung những trang web mà chúng ta cần dựa vào từ khoá cụ thể. Hoặc là những trang web so sánh giá cả từ nhiều nguồn khác nhau [websosanh.vn], trang tin báo tổng hợp [baomoi.com] và nhiều ví dụ khác mà mình không thể liệt kê hết ở đây.
Chúng ta có thể tự viết một crawler đơn giản nhằm thu gom một số dữ liệu cơ bản nào đó. Khi hướng dẫn học viên học module 2 [Advance Programming with Java] tại CodeGym, mình thường giao bài tập xây dựng công cụ crawler này. Ví dụ thu thập giá bất động sản trên các trang rao vặt hoặc giá sản phẩm trên các trang thương mại điện tử. Qua bài viết này, mình sẽ hướng dẫn lại các bạn làm bài tập này với ngôn ngữ lập trình Java.
Nhà đất bán ...nội dung các danh mục con của mục Nhà đất bán ở đây
Nhà đất cho thuê
Đoạn code trên cần sửa lại như dưới đây để loại ra những link không cần thiết:
public class DemoUsingURL { private static String getContentFrom[String link] throws IOException { ... } private static List getLinksFromMenu[String content, String menuPattern] { // Regex List links = new ArrayList[]; Pattern p = Pattern.compile[menuPattern]; Matcher m = p.matcher[content]; while [m.find[]] { Pattern p2 = Pattern.compile["
- [.*?]
- [.*?]
Ở đoạn code trên, mình tách phần lấy nội dung từ đường dẫn trang web thành hàm getContentFrom
, và một hàm tách link từ nội dung có tên là getLinksFromMenu
. Hàm main
sử dụng hai hàm được khai báo ở trên để lấy các đường link nằm trong mục Nhà đất bán và Nhà đất cho thuê.
1.3. Thực hành
Bây giờ, các bạn có thể tự thực hành với hướng dẫn hai bước trên để xác định những thông tin còn lại.
Nếu cần có kết quả ngay thì bạn có thể tham khảo mã nguồn mình cung cấp ở cuối bài viết này! 🙂
1.4. Tổng hợp các regex tìm được
Dưới đây các regex đã tìm được với trang batdongsan.com.vn để các bạn tham khảo:
- Link các danh mục tin
- Link đến nội dung chi tiết
- Thông tin cụ thể [như tiêu đề, giá, diện tích,…] trong tin chi tiết
1.4.1. Link các danh mục tin
Tìm các link bên trong mục “Nhà đất bán” và “Nhà đất cho thuê”:
Pattern p1 = Pattern.compile["
- [.*?]
- [.*?]
Sau đó, tìm các link danh mục thuộc “Nhà đất bán” và “Nhà đất cho thuê” để loại các link không cần thiết:
Pattern pLink = Pattern.compile["
1.4.2. Link đến nội dung chi tiết
Pattern p = Pattern.compile["
Chủ Đề