Từ Regex đến LLM: Hành trình trích xuất dữ liệu web của tôi

Tôi đã xây dựng một công cụ so sánh giá. Tôi cần lấy dữ liệu sản phẩm từ hàng chục trang thương mại điện tử. Mỗi trang lại có một cấu trúc khác nhau. Một số trang sử dụng các class CSS ngẫu nhiên. Một số khác lại dùng JavaScript để tải nội dung.

Đầu tiên, tôi đã thử cách truyền thống. Tôi sử dụng Regex và BeautifulSoup.

Nó hoạt động được với hai trang. Sau đó, một trang thay đổi bố cục. Mã của tôi bị lỗi. Một trang khác lại sử dụng nội dung động. Tôi dành nhiều thời gian để sửa các scraper hơn là sử dụng dữ liệu.

Sau đó, tôi thử dùng AI. Tôi đưa mã HTML thô vào một LLM.

Kết quả rất tệ. Đầu ra không nhất quán. Đôi khi tôi nhận được JSON. Đôi khi lại là các đoạn văn bản. Mô hình bị ảo giác (hallucinated) dữ liệu. Chi phí quá cao vì tôi đã gửi quá nhiều token.

Tôi đã tìm thấy một giải pháp trung hòa. Hiện tại, tôi sử dụng phương pháp tiếp cận hybrid.

Đây là quy trình của tôi:

  • Tiền xử lý HTML. Tôi loại bỏ các script, style và thanh điều hướng. Tôi chỉ giữ lại văn bản hiển thị. Điều này giúp giảm số lượng token và chi phí.
  • Sử dụng JSON mode hoặc function calling. Điều này buộc LLM phải trả về dữ liệu có cấu trúc.
  • Sử dụng logic thử lại (retry logic). Nếu JSON bị sai, mã sẽ thực hiện lại.
  • Lưu bộ nhớ đệm (cache) kết quả. Tôi lưu các lần trích xuất thành công theo từng URL để tránh việc phải trả tiền cho cùng một trang web hai lần.

Regex và BeautifulSoup vẫn là lựa chọn tốt nhất cho các trang web tĩnh và có cấu trúc tốt. Chúng nhanh và miễn phí.

LLM thì tốt hơn cho các trang web lộn xộn và khó đoán. Nhưng bạn phải làm sạch dữ liệu trước để giữ chi phí ở mức thấp.

Những bài học kinh nghiệm của tôi:

  • Theo dõi chi phí và tỷ lệ thành công của bạn.
  • Chú ý đến độ trễ (latency). Các lệnh gọi LLM mất vài giây chứ không phải vài mili giây.
  • Xác thực đầu ra. Kiểm tra xem giá cả có giống như một mức giá thực tế hay không.
  • Sử dụng hệ thống hybrid. Sử dụng parser cho các trang dễ và LLM cho các trang lộn xộn.

Thiết lập này giúp tôi tiết kiệm hàng giờ làm việc. Tôi có thể thêm một cửa hàng mới trong chưa đầy một giờ.

Bạn xử lý dữ liệu web lộn xộn như thế nào? Bạn ưu tiên dùng parser hay LLM?

Nguồn: https://dev.to/__c1b9e06dc90a7e0a676b/from-regex-to-llms-my-journey-extracting-unstructured-web-data-5gmh

Cộng đồng học tập tùy chọn: https://t.me/GyaanSetuAi