Chuyển đến nội dung
AutoValue
28 tháng 8, 2026 · Data Quality

Mùa Hè Số Lượng Tin Đăng Của Chúng Tôi Sụp Đổ: Nhật Ký Từ Bên Trong Crawler

AutoValue Editorial
Mùa Hè Số Lượng Tin Đăng Của Chúng Tôi Sụp Đổ: Nhật Ký Từ Bên Trong Crawler

Hầu như ngày nào tôi cũng mở một tab chỉ để hiển thị số lượng nguồn dữ liệu. Không phải thứ gì hào nhoáng — không biểu đồ, không bộ lọc, chỉ là một con số bên cạnh mỗi trong số 1.375 trang web mà chúng tôi thu thập tin đăng, cùng dấu thời gian lần cuối mỗi trang "báo cáo". Hầu hết các ngày, nó nhàm chán theo đúng cách mà hạ tầng nên nhàm chán. Mùa hè này thì không, và tôi nghĩ câu chuyện về những gì đã xảy ra sẽ hữu ích với bạn — một người đang tìm mua xe — hơn phần lớn những bài "cách mua xe cũ" mà lẽ ra chúng tôi có thể viết thay vào đó. Đây là câu chuyện về ý nghĩa thực sự của "dữ liệu trực tiếp" khi thứ nuôi nó là 1.375 trang web riêng lẻ chẳng nợ nần gì bạn cả.

Giữa tháng Bảy: con số tôi từng tự hào

Đến giữa tháng Bảy, chúng tôi đã đẩy sổ đăng ký nguồn lên 1.190 nguồn trên 73 khu vực — kết quả của vài tuần đối chiếu các mục trùng lặp và các liên kết chết vốn âm thầm thổi phồng con số của chính chúng tôi. Tôi nhớ mình đã nghĩ 1.190 nguồn thật, đã xác nhận, là điều đáng tự hào. Đó là rất nhiều trang đại lý riêng lẻ, các bảng rao vặt, và các nguồn đấu giá, mỗi trang có cấu trúc HTML riêng, giới hạn tốc độ truy cập riêng, và quan điểm riêng về việc liệu một trình thu thập dữ liệu là khách hàng hay kẻ tấn công.

Sau đó, một chiến dịch giải quyết tồn đọng mà chúng tôi đang chạy — xử lý danh sách chờ gồm 683 nguồn đã bị hoãn lại nhiều tháng, một số bị chặn, một số chưa từng được xây dựng — bắt đầu có kết quả. Trong nửa sau tháng Bảy, 274 nguồn trong số đó đã được xây dựng và kết nối. Đến cuối tháng, số nguồn hoạt động đã tăng lên 1.464. Đó là kiểu tuần mà bạn phải chụp màn hình lại.

Đầu tháng Tám: 241 nguồn, biến mất

Rồi đến con số phá hỏng cả tuần của bạn: chỉ sau một đêm, 241 nguồn rơi vào trạng thái suy giảm. Không phải do chúng tôi gây ra — tài khoản của nhà cung cấp proxy đã hết hạn thanh toán, và một phần lớn lưu lượng truy cập của chúng tôi đi qua các IP xoay vòng chính là để tránh bị các trang web chặn vì giới hạn tốc độ đối với trình thu thập dữ liệu. Không có proxy, không có trang mới, không có tin đăng mới. Các nguồn không tự thông báo là chúng đã hỏng; chúng chỉ âm thầm ngừng trả về dữ liệu mới trong khi các tin đăng cũ vẫn nằm đó, trông như thể vẫn còn hiện hành.

Đây là phần không hiện ra trong số lượng tin đăng trên bất kỳ trang xe nào, kể cả trang của chúng tôi, trừ khi bạn cố tình tìm hiểu: một chợ xe "trực tiếp" có thể có những dòng dữ liệu cũ nằm cạnh những dòng mới và trông giống hệt nhau khi nhìn từ bên ngoài. Chúng tôi đã đặt điều kiện cho các đợt crawl mới dựa trên một phép kiểm tra tình trạng proxy thực tế, để một nhóm proxy đã chết không thể âm thầm làm suy giảm chất lượng thêm nữa, và tạm dừng những phần lịch trình có thể khiến tình hình tệ hơn. Đây không phải công việc hào nhoáng gì. Đây là kiểu việc mà nếu bạn chưa bao giờ nghe nói tới, nghĩa là ai đó đã làm tốt phần việc của họ.

Một điều đáng nói thẳng ra: bất kỳ trang nào khẳng định một con số tin đăng cố định, tròn trịa mỗi ngày thì hoặc là không thực sự trực tiếp, hoặc là không kể cho bạn nghe về những tuần như tuần này.

Cơn đóng băng

Việc gia hạn proxy đã khắc phục phần lớn vấn đề. Điều tôi không ngờ tới là vài tuần sau, chính crawler lại bị treo — một deadlock khi teardown, mười tám trong số mười chín luồng worker mắc kẹt ở futex_wait, không tiêu tốn CPU nào, suốt 75 giờ liên tục. Không sập, không log lỗi nào la hét với ai cả. Chỉ là... không có gì xảy ra, trong khi dashboard vẫn hiển thị lần chạy thành công cuối cùng như thể nó vẫn còn hiện hành. Chúng tôi chưa cài đặt watchdog trên máy chủ cụ thể đó, và đó là kiểu câu bạn chỉ viết ra sau khi điều nó mô tả đã từng xảy ra với bạn một lần.

Chúng tôi đã xây dựng watchdog. Chúng tôi tạm dừng lịch trình cho đến khi việc gia hạn proxy được xác nhận ổn định, thay vì mạo hiểm để một đợt crawl nửa vời âm thầm thay thế các dòng dữ liệu tốt bằng dữ liệu xấu — một nguồn đã được crawl sẽ có tin đăng bị thay thế, chứ không phải hợp nhất, vì vậy một đợt chạy tệ không chỉ đơn giản là không thêm được dữ liệu mới, nó còn có thể chủ động xóa các dòng tốt và thay bằng các dòng tệ hơn. Sự bất đối xứng đó là lý do tại sao chúng tôi thà chạy với dữ liệu cũ trong một ngày còn hơn chạy trong tình trạng suy giảm.

Con số đã dừng lại ở đâu

Đây là con số hôm nay, và hình dạng của sáu tuần đã đưa chúng tôi đến đây:

Chúng tôi dừng lại ở 1.375 nguồn trên 73 khu vực, cung cấp 1.108.535 tin đăng trực tiếp, với 12.823 tin hiện đang được gắn cờ là có giá thấp hơn nhóm khu vực của chúng. Đó là ít hơn khoảng 90 nguồn so với đỉnh điểm tháng Bảy — một số trong 241 nguồn bị suy giảm chưa bao giờ hồi phục hoàn toàn, một số ít là các trang đã thay đổi cách phòng thủ chống bot trong lúc đó và cần được xây dựng lại thay vì chỉ kết nối lại. Chúng tôi vẫn đang xử lý một vài trong số đó.

Điều này thực sự có ý nghĩa gì với bạn

Không điều gì trong số này thay đổi việc bạn nên mua chiếc xe nào. Nhưng nó nên thay đổi cách bạn đọc bất kỳ con số "hàng tồn kho trực tiếp" nào trên bất kỳ trang xe nào, không chỉ trang của chúng tôi. Pháp hiện đang đứng đầu về số lượng khu vực của chúng tôi với 67.569 tin đăng, Nhật Bản theo sát phía sau với 61.940, và những con số này biến động — không phải vì bản thân thị trường xe cũ dao động nhanh đến vậy, mà vì hạ tầng theo dõi nó biến động. Một tin đăng đã cũ ba ngày vì nguồn bị suy giảm trông giống hệt một tin đăng mới, trừ khi nền tảng thành thật về sự khác biệt đó.

Chúng tôi thà kể cho bạn nghe về cơn đóng băng 75 giờ còn hơn giả vờ rằng con số của chúng tôi không bao giờ dao động. Một bộ dữ liệu chưa từng thừa nhận có một tuần tệ hại là bộ dữ liệu bạn nên nghi ngờ nhiều hơn, chứ không phải ít hơn.

Data QualityWEB ScrapingMethodologyTransparencyMarket Data
Chia sẻ

Bài viết liên quan