Quay lại blog

Web Scraping là gì? Nguyên lý, quy trình và tuân thủ trong thực tế

Web scraping là quá trình tự động lấy nội dung web và chuyển đổi thành dữ liệu có cấu trúc. Bài viết này giải thích sự khác biệt giữa trang tĩnh và động, cách chọn công cụ, quy trình triển khai đầy đủ cũng như ranh giới tuân thủ của robots.txt và dữ liệu cá nhân.

Web scraping là quá trình sử dụng chương trình để lấy nội dung web, trích xuất các trường cần thiết từ HTML, phản hồi API hoặc kết quả do trình duyệt kết xuất, rồi sắp xếp thành bảng, JSON hoặc bản ghi cơ sở dữ liệu. Các ứng dụng phổ biến bao gồm theo dõi giá, tổng hợp thông tin sản phẩm công khai, nghiên cứu dư luận, kiểm tra SEO, phân tích tin tuyển dụng và di trú dữ liệu nội bộ.

Web scraping không đơn giản là "sao chép và dán tự động". Một dự án đáng tin cậy phải xử lý ít nhất các quyền truy cập, cấu trúc trang, kết xuất động, phân trang, loại bỏ trùng lặp, giới hạn tốc độ, thử lại lỗi, chất lượng dữ liệu và tuân thủ quyền riêng tư. Khả năng truy cập kỹ thuật vào một trang không có nghĩa là bạn có quyền thu thập, lưu trữ hoặc tái sử dụng toàn bộ dữ liệu của nó.

Sự khác biệt giữa Web Scraping và trình thu thập web là gì?

Hai thuật ngữ thường bị nhầm lẫn, nhưng chúng tập trung vào những điều khác nhau:

  • Trình thu thập web (Web Crawler) tập trung vào việc khám phá và duyệt URL, ví dụ liên tục theo các liên kết từ trang chủ để tìm trang mới;
  • Web Scraping tập trung vào việc trích xuất trường từ trang đích, chẳng hạn tên sản phẩm, giá, trạng thái tồn kho và thời gian cập nhật gần nhất;
  • Một hệ thống hoàn chỉnh thường trước tiên thu thập URL, sau đó scraping trang và cuối cùng làm sạch và lưu trữ dữ liệu.

Các công cụ tìm kiếm là ví dụ điển hình của hệ thống thu thập và xử lý. Các trang hiện đại cũng có thể cần JavaScript chạy trước khi nội dung đầy đủ hiển thị. Việc thu thập dữ liệu thương mại thường nhỏ hơn nhiều, nhưng chuỗi cơ bản "khám phá trang, lấy nội dung, phân tích trường, lưu kết quả" là tương tự.

Web Scraping hoạt động về cơ bản như thế nào

Một nhiệm vụ scraping thường trải qua sáu giai đoạn.

1. Xác định mục tiêu dữ liệu

Trước tiên hãy xác định các trường bạn thực sự cần, tần suất cập nhật, phạm vi bao phủ và mục đích sử dụng. Ví dụ, theo dõi giá có thể không cần tên của người đánh giá; kiểm tra SEO chỉ cần tiêu đề, mã trạng thái và thẻ canonical, không cần toàn bộ nội dung của mỗi trang.

Mục tiêu càng rõ ràng thì càng dễ kiểm soát khối lượng yêu cầu, chi phí lưu trữ và rủi ro dữ liệu cá nhân.

2. Lấy trang

Đối với trang tĩnh nơi máy chủ trả về HTML đầy đủ trực tiếp, một HTTP client thông thường thường là đủ. Đối với trang động tải nội dung bằng JavaScript hoặc yêu cầu nhấp chuột và cuộn, bạn có thể cần sử dụng công cụ tự động hóa trình duyệt thực để kết xuất.

Nhưng trước khi đưa trình duyệt vào, trước tiên hãy kiểm tra xem trang web có cung cấp API chính thức, xuất dữ liệu, RSS, sơ đồ trang hoặc tập dữ liệu công khai hay không. Các kênh này thường ổn định hơn và dễ tuân thủ điều khoản sử dụng.

3. Phân tích và xác định vị trí phần tử

Sau khi có HTML, chương trình sử dụng CSS selector hoặc XPath để xác định vị trí nội dung. Tài liệu selector của Scrapy giải thích rằng selector có thể trích xuất nút từ HTML và các đối tượng phản hồi của Scrapy cung cấp trực tiếp các giao diện như .css().xpath().

Selector nên dựa trên ngữ nghĩa ổn định, chẳng hạn thuộc tính dữ liệu, dữ liệu có cấu trúc hoặc phân cấp vùng chứa rõ ràng, và tránh phụ thuộc vào tên lớp ngẫu nhiên thay đổi thường xuyên khi trang được thiết kế lại.

4. Làm sạch và chuẩn hóa

Văn bản trang thường bị trộn với khoảng trắng thừa, ký hiệu tiền tệ, đơn vị và định dạng bản địa hóa. Giai đoạn làm sạch nên chuẩn hóa:

  • mã hóa ký tự và ngắt dòng;
  • định dạng ngày, múi giờ và số;
  • tiền tệ và đơn vị đo lường;
  • URL tương đối so với URL tuyệt đối;
  • giá trị thiếu, bản ghi trùng lặp và giá trị ngoại lệ.

Tốt nhất nên giữ cả giá trị gốc và giá trị đã làm sạch để có thể truy vết khi có tranh chấp hoặc thay đổi quy tắc.

5. Lưu trữ và quản lý phiên bản

Lượng dữ liệu nhỏ có thể đưa vào CSV hoặc bảng tính; các nhiệm vụ liên tục phù hợp hơn với cơ sở dữ liệu hoặc lưu trữ đối tượng. Ngoài các trường nghiệp vụ, bạn cũng nên lưu URL nguồn, dấu thời gian scraping, trạng thái phản hồi và phiên bản dữ liệu, phiên bản bộ phân tích. Nhờ đó bạn có thể biết thay đổi đến từ trang web, quy tắc phân tích hay lần scraping thất bại.

6. Giám sát và bảo trì

Trang web bị thiết kế lại, trường di chuyển và API thay đổi. Scraping sản xuất nên giám sát tỷ lệ thành công, tỷ lệ giá trị rỗng, tỷ lệ trùng lặp, thời gian phản hồi, mã trạng thái HTTP và khối lượng yêu cầu mỗi đơn vị thời gian. Nếu một trường đột nhiên trống hoàn toàn, hãy tạm dừng nhiệm vụ và điều tra thay vì để giá trị rỗng ghi đè dữ liệu lịch sử tốt.

Trang tĩnh, trang động hay API: nên chọn gì?

Ưu tiên API chính thức hoặc xuất dữ liệu trước

API chính thức thường cung cấp trường ổn định, phân trang và cơ chế quyền. Miễn là giấy phép, hạn mức và chi phí đáp ứng nhu cầu, nó thường đáng tin cậy hơn việc phân tích trang.

HTML tĩnh phù hợp cho scraping nhẹ

Nếu bạn có thể thấy dữ liệu đích bằng cách xem mã nguồn trang, bạn có thể dùng HTTP client cộng với bộ phân tích HTML. Nó khởi động nhanh, ít tốn tài nguyên và phù hợp với danh sách công khai, tài liệu và trang nội dung.

Chỉ xem xét tự động hóa trình duyệt cho trang động

Chỉ khi nội dung xuất hiện sau khi script chạy, hoặc bạn phải thực hiện nhấp chuột, lọc và cuộn trong phạm vi được phép, hãy xem xét các công cụ như Playwright. Tài liệu Playwright BrowserType cho thấy giao diện tự động hóa để khởi chạy hoặc kết nối trình duyệt.

Tự động hóa trình duyệt tốn nhiều CPU và bộ nhớ hơn, và selector trang dễ bị ảnh hưởng bởi thiết kế lại. Vì vậy, đừng biến nó thành mặc định cho mọi dự án, và đừng bao giờ dùng nó để vượt qua quyền đăng nhập, CAPTCHA hoặc kiểm soát truy cập.

Làm thế nào để bắt đầu một dự án Web Scraping?

Bước 1: Xác nhận quyền và các kênh thay thế

Xem xét điều khoản dịch vụ của trang, điều khoản API, robots.txt, thông báo bản quyền và giấy phép dữ liệu. Nếu dự án liên quan đến nội dung sau đăng nhập, nội dung trả phí, dữ liệu cá nhân hoặc sử dụng thương mại quy mô lớn, bộ phận pháp lý hoặc cán bộ bảo vệ dữ liệu nên xác nhận cơ sở.

robots.txt là cơ chế tiêu chuẩn để trang web thể hiện quy tắc scraping với client tự động. RFC 9309 làm rõ rằng nó được chủ sở hữu dịch vụ dùng để kiểm soát cách trình thu thập truy cập tài nguyên, nhưng không phải là cơ chế ủy quyền truy cập. Nói cách khác, cho phép scraping không tự động cấp bản quyền hoặc quyền xử lý dữ liệu cá nhân, và quy tắc cấm không nên được coi là trở ngại cần "vượt qua về mặt kỹ thuật".

Bước 2: Lấy mẫu kiểm tra cấu trúc trang

Chọn 10–20 trang bao phủ các phân trang, danh mục và trường hợp biên khác nhau để xác nhận các trường luôn ở cùng vị trí. Đặc biệt kiểm tra các trường hợp không có giá, thiếu ảnh, ngừng bán, nhiều biến thể, đa ngôn ngữ và phiên đăng nhập hết hạn.

Bước 3: Thiết kế cấu trúc dữ liệu

Định nghĩa cho mỗi trường tên, kiểu, có bắt buộc không, quy tắc làm sạch và khóa duy nhất. Ví dụ, dữ liệu sản phẩm có thể bao gồm URL nguồn, ID sản phẩm trên nền tảng, tiêu đề, giá hiện tại, đơn vị tiền tệ, trạng thái tồn kho và thời gian thu thập.

Bước 4: Xây dựng nguyên mẫu nhỏ trước

Dùng một vài trang để xác nhận selector, phân trang, mã hóa, loại bỏ trùng lặp và xử lý lỗi. Đừng chạy toàn bộ trang web trước khi selector ổn định.

Bước 5: Thêm giới hạn tốc độ thân thiện

Đặt khoảng cách yêu cầu hợp lý, giới hạn đồng thời, thời gian chờ và backoff theo cấp số nhân; chủ động giảm tốc hoặc tạm dừng khi gặp 429 Too Many Requests hoặc 5xx liên tục. Lưu cache các trang đã lấy và ít thay đổi để tránh yêu cầu trùng lặp. Nếu có thể scraping tăng dần theo thời gian cập nhật, đừng lấy lại toàn bộ mỗi ngày.

Bước 6: Vận hành với giám sát và điều kiện dừng

Đặt điều kiện dừng cho các trạng thái bất thường, chẳng hạn CAPTCHA đột ngột xuất hiện, đăng nhập hết hạn, tỷ lệ giá trị rỗng tăng vọt, thay đổi cấu trúc hoặc lỗi máy chủ tăng liên tục. Một hệ thống tự động nên dừng và chờ xác nhận của con người khi không chắc chắn, thay vì thử lại không ngừng.

Nên đọc robots.txt như thế nào?

robots.txt thường nằm tại /robots.txt trong thư mục gốc. Các quy tắc được nhóm theo user-agent và mô tả đường dẫn bằng allowdisallow. Giải thích robots.txt của Google cũng nhấn mạnh rằng các quy tắc chỉ áp dụng cho máy chủ, giao thức và cổng tương ứng, và đường dẫn phân biệt chữ hoa chữ thường.

Lưu ý rằng:

  • robots.txt không phải tường mật khẩu và không nên dùng để giấu URL bí mật;
  • nó chủ yếu thể hiện sở thích thu thập và không tương đương với ủy quyền nội dung;
  • các điều khoản cụ thể, hợp đồng, sở hữu trí tuệ và nghĩa vụ bảo vệ dữ liệu của trang vẫn cần được đánh giá riêng;
  • ngay cả khi không có robots.txt, điều đó không có nghĩa bạn có thể scraping với độ đồng thời không giới hạn hoặc thu thập bất cứ thứ gì;
  • dự án nên sử dụng user-agent có thể nhận dạng và thông tin liên hệ, thay vì ngụy trang thành người dùng bình thường để trốn tránh quản trị.

Những rủi ro tuân thủ nào của Web Scraping?

Dữ liệu cá nhân

Hiển thị công khai không có nghĩa là có thể xử lý không giới hạn. Nếu dữ liệu có thể trực tiếp hoặc gián tiếp xác định một cá nhân, bên thu thập vẫn có thể chịu nghĩa vụ về thông báo, căn cứ pháp lý, thời hạn lưu trữ, bảo mật và phản hồi quyền.

Giải thích của Ủy ban Châu Âu về các nguyên tắc GDPR liệt kê các nguyên tắc như hợp pháp, công bằng và minh bạch, giới hạn mục đích, tối thiểu hóa dữ liệu, giới hạn lưu trữ, chính xác, bảo mật và trách nhiệm giải trình. Các dự án dữ liệu nhắm đến cá nhân ở EU nên chỉ thu thập các trường cần thiết cho mục đích đã nêu và đặt thời hạn xóa hoặc rà soát.

Bản quyền và quyền cơ sở dữ liệu

Sự kiện và cách thể hiện của trang có thể được bảo vệ theo những cách khác nhau; sao chép lượng lớn nội dung, hình ảnh, bình luận hoặc nội dung cơ sở dữ liệu rủi ro cao hơn việc chỉ ghi lại các trường sự kiện cần thiết. Việc bạn có thể tái xuất bản, huấn luyện mô hình hay bán lại thương mại phụ thuộc vào khu vực pháp lý, giấy phép và mục đích sử dụng.

Hợp đồng và kiểm soát truy cập

Điều khoản trang web có thể hạn chế truy cập tự động, tái sử dụng dữ liệu hoặc chia sẻ tài khoản. Bạn không được vượt qua đăng nhập, tường phí, CAPTCHA, giới hạn tần suất hoặc các kiểm soát truy cập kỹ thuật khác. Nếu dự án phải lấy dữ liệu hạn chế, hãy nhận ủy quyền rõ ràng trước.

Ảnh hưởng đến dịch vụ của trang web

Độ đồng thời quá cao làm tăng chi phí của đối tác và ảnh hưởng đến người dùng bình thường. Giới hạn tốc độ, cache, cập nhật tăng dần, lịch chạy lệch giờ và điều kiện dừng rõ ràng vừa là yêu cầu chất lượng kỹ thuật vừa là phép lịch sự dịch vụ cơ bản.

Làm thế nào để kiểm soát tốt hơn các nhiệm vụ tự động hóa trình duyệt?

Khi scraping thực sự cần kết xuất trình duyệt, hoặc liên quan đến nhiều tài khoản, nhiều môi trường và cộng tác nhóm, khả năng truy vết và kiểm soát quyền trở nên quan trọng. Bạn có thể tổ chức các thao tác trình duyệt đó thành quy trình làm việc có thể kiểm toán và quản lý:

  • Cô lập môi trường trình duyệt theo khách hàng hoặc dự án để giảm trộn lẫn cookie và phiên;
  • Chỉ cấp cho thành viên thực hiện những quyền cần thiết, thay vì chia sẻ mật khẩu tài khoản;
  • Dùng nhật ký thao tác để ghi lại ai đã khởi động nhiệm vụ nào và khi nào;
  • Đặt hàng đợi lô nhỏ và giới hạn đồng thời cho các trang cần kết xuất, giữ cường độ yêu cầu trong tầm kiểm soát;
  • Xác nhận selector trong môi trường kiểm thử trước khi từng bước mở rộng các nhiệm vụ trong phạm vi được phép;
  • Khi tích hợp với lịch trình nội bộ, giữ lại thời gian chờ, giới hạn tốc độ và cơ chế dừng thủ công.

Lưu ý rằng không công cụ tự động hóa trình duyệt nào có thể biến việc thu thập dữ liệu trái phép thành hoạt động hợp pháp, và nó không nên được dùng để vượt qua CAPTCHA, chặn, tường phí hoặc giới hạn nền tảng. Trước khi bắt đầu tự động hóa, hãy xác nhận nguồn dữ liệu, quyền và mục đích sử dụng. Nếu bạn cần quản lý quy trình trình duyệt được ủy quyền, hãy cân nhắc sử dụng công cụ quản lý tự động hóa trình duyệt phù hợp để thiết lập môi trường kiểm thử.

Câu hỏi thường gặp

Web Scraping có hợp pháp không?

Không có câu trả lời duy nhất áp dụng cho mọi quốc gia, trang web và loại dữ liệu. Bạn cần xem xét đồng thời điều khoản trang, phương thức truy cập, bản quyền, quyền cơ sở dữ liệu, dữ liệu cá nhân, cạnh tranh thương mại và luật pháp địa phương. Đối với dự án rủi ro cao hoặc quy mô lớn, hãy tham khảo cố vấn pháp lý chuyên nghiệp.

Nếu robots.txt cho phép thì có thể thoải mái scraping không?

Không. robots.txt là quy tắc scraping, không phải giấy phép bản quyền, miễn trừ hợp đồng hay ủy quyền xử lý dữ liệu cá nhân.

Nên scraping trang tĩnh hay dùng trình duyệt headless?

Ưu tiên cách nhẹ khi có thể lấy dữ liệu qua API chính thức hoặc HTML tĩnh; chỉ dùng tự động hóa trình duyệt khi nội dung đích thực sự phụ thuộc vào JavaScript hoặc tương tác được ủy quyền.

Làm thế nào để tránh dữ liệu bẩn do trang bị thiết kế lại?

Lưu nguồn và dấu thời gian, đặt xác thực trường và cảnh báo tỷ lệ giá trị rỗng, quản lý phiên bản cho quy tắc phân tích và dừng ghi khi có bất thường thay vì ghi đè dữ liệu lịch sử.

Tóm tắt

Cốt lõi của web scraping không phải là "lấy trang xuống", mà là chuyển thông tin web thành dữ liệu có cấu trúc theo cách có kiểm soát, có thể xác minh và duy trì. Một quy trình trưởng thành ưu tiên giao diện chính thức, tôn trọng robots.txt và điều khoản dịch vụ, kiểm soát cường độ yêu cầu, tối thiểu hóa dữ liệu cá nhân và thiết kế cơ chế dừng cho các thay đổi cấu trúc và trạng thái bất thường.

Khi quyền, mô hình dữ liệu và giám sát đều đến trước việc mở rộng quy mô, web scraping thực sự có thể trở thành hạ tầng dữ liệu ổn định thay vì một script mỏng manh dùng một lần.