Hệ thống thu thập dữ liệu thông minh - AI Paser Crawler

- 12 mins

Chào mọi người, mình đã trở lại rồi đây! Mình rất cảm ơn mọi người thời gian qua đã ủng hộ blog của mình, những góp ý và thắc mắc của các bạn chính là nguồn động lực to lớn đối với mình. Bài viết hôm nay khá là đặc biệt, mình sẽ giới thiệu cho mọi người về một dự án mà mình rất tâm huyết: AI Parser Crawler (APC) - Hệ thống thu thập dữ liệu thông minh, hi vọng mọi người sẽ cảm thấy thích nó.

APC được thiết kế để crawl dữ liệu từ nhiều website mà không cần biết trước cấu trúc, có khả năng tự động nhận diện các trang có dữ liệu mục tiêu, tự động trích xuất thông tin cần thiết trên trang. Trong giới hạn bài viết này mình sẽ trình bày tóm tắt những ý tưởng chính, thiết kế và kinh nghiệm khi triển khai dự án, nếu bạn đọc quan tâm và muốn tìm hiểu sâu hơn thì có thể tham khảo luận văn của mình tại đây

Nội dung

  1. Giới thiệu tổng quan
  2. Phân tích giải pháp
  3. Kiến trúc thiết kế
  4. Một số kinh nghiệm rút ra
  5. Kết luận

Giới thiệu tổng quan

Ý tưởng cho dự án này xuất hiện khi mình cần maintain một con Crawler dựa trên Scrapy, thu thập dữ liệu từ các trang tin rao bất động sản, sử dụng css selectorxpath parser để trích rút các thông tin từ tin rao như địa chỉ, giá, diện tích, số phòng… Hệ thống đang có gặp một số vấn đề như sau:

Để giải quyết các vấn đề trên thì ý tưởng của APC là bổ sung thêm một số chức năng như sau:

Dự án đã được mình triển khai trong 2 sản phẩm ở 2 công ty khác nhau, một ở Cenhomes.vn với bài toán thu thập dữ liệu từ nhiều website bất động sản, một ở Darenft với bài toán tổng hợp so sánh giá listing của 1 NFT trên nhiều chợ. Mỗi bài toán có những yêu cầu cụ thể khác nhau tuy nhiên vẫn sử dụng chung về ý tưởng, giải pháp và thiết kế, cùng một số công nghệ opensource như Fasttext, Web2text, Fonduer.

Phân tích giải pháp

Nhận biết trang mục tiêu

Trong hệ thống crawler bằng Scrapy, crawler sẽ sử dụng các luật được định nghĩa bởi lập trình viên để xác định một URL có có chứa dữ liệu mục tiêu hay không, các luật này sẽ được fix cứng trong code cho từng website (gọi là Spider). Trong hệ thống APC, mình sử dụng 2 mô hình học máy để xác định trang mục tiêu:

Trích rút thông tin từ trang

Bộ parser truyền thống trong Scrapy yêu cầu lập trình viên phải định nghĩa luật bóc tách dữ liệu cho từng website, điều này khiến việc mở rộng thu thập dữ liệu trên nhiều website trở nên khó khăn. Để trích xuất thông tin, APC sử dụng 2 mô hình học máy:

Kiến trúc thiết kế

APC gồm có 2 thành phần chính:

Sơ đồ các thành phần của hệ thống

Dưới đây là sơ đồ luồng hoạt động của APC bao gồm 2 pharse:

Luồng hoạt động của hệ thống

Một số kinh nghiệm rút ra

Trong quá trình thực hiện dự án mình cũng có rút ra được một số kinh nghiệm, hi vọng có thể giúp ích cho bạn đọc nếu muốn xây dựng một sản phẩm tương tự:

Kết luận

Trên đây là phần tóm tắt sơ lược về ý tưởng, thiết kế và những kinh nghiệm của mình trong quá trình thực hiện APC, nếu bạn đọc quan tâm hoặc có thắc mắc gì có thể liên hệ trực tiếp với mình nhé. Cảm ơn mọi người!