Cách xây dựng một trình thu thập dữ liệu Zalando bằng Python: Hướng dẫn từng bước
TL;DR
Xây dựng một trình thu thập dữ liệu Zalando chỉ cho các trang công cộng mà bạn được phép thu thập, và kiểm tra các điều khoản hiện tại của trang và chính sách robot trước khi chạy nó.
Bắt đầu với một URL sản phẩm và trích xuất dữ liệu có cấu trúc nhúng trước khi thêm tự động hóa trình duyệt.
Sử dụng Playwright chỉ khi các trường cần thiết xuất hiện sau khi thực thi JavaScript; HTTP thuần nhanh hơn khi phản hồi ban đầu đã chứa chúng.
Lưu trữ các định danh sản phẩm ổn định, URL chuẩn, tiền tệ, tình trạng có sẵn, thời gian thu thập và một hàm băm nội dung để các bản cập nhật là idempotent.
Xem các trang đồng ý, chuyển hướng địa phương, các biến thể thiếu và phản hồi truy cập bị từ chối như những trạng thái kết thúc rõ ràng.
Trình thu thập dữ liệu Zalando là gì và tại sao bạn cần một cái?
Một trình thu thập dữ liệu Zalando là một chương trình được kiểm soát đọc các trang sản phẩm công cộng được phép và chuyển đổi các trường đã chọn thành một bản ghi nhất quán. Nstdata Crawl có thể phục vụ như là một tùy chọn thu thập có quản lý khi một nhóm không muốn vận hành các trình duyệt và định tuyến, trong khi các thư viện Python cung cấp kiểm soát trực tiếp hơn. Các ứng dụng thích hợp bao gồm QA nội bộ, nghiên cứu danh mục được phê duyệt và giám sát các sản phẩm mà tổ chức của bạn được phép theo dõi.
Mục tiêu không phải là sao chép toàn bộ gian hàng. Một công việc đáng tin cậy bắt đầu từ một kho URL đã được phê duyệt và một sơ đồ hẹp. Hướng dẫn dữ liệu sản phẩm thương mại điện tử giải thích lý do tại sao các bản ghi nguồn và các bản ghi kinh doanh được chấp nhận nên giữ riêng biệt.
Bạn cần gì trước khi bắt đầu?
Bạn cần Python 3.11 hoặc mới hơn, một môi trường tách biệt, httpx, beautifulsoup4, và Playwright cho các trang thực sự yêu cầu một trình duyệt. Bạn cũng cần có sự cho phép bằng văn bản hoặc một cơ sở hợp pháp được ghi tài liệu, một bộ URL thử nghiệm nhỏ, một chính sách địa phương và tiền tệ, và một sơ đồ đích.
Định nghĩa những trường này trước khi viết các bộ chọn: product_id, canonical_url, name, brand, currency, price_text, availability, color, size_options, retrieved_at, và source_hash. Không thu thập dữ liệu khách hàng, tài khoản, hoặc thông tin thanh toán. Đọc các điều khoản hiện tại của Zalando và tệp robot của trang cho máy chủ và địa phương chính xác mà bạn dự định truy cập.
Một trang sản phẩm Zalando thực sự hoạt động như thế nào?
Một trang sản phẩm có thể kết hợp HTML được máy chủ tạo ra, JSON nhúng và các yêu cầu phía khách. DOM hiển thị không phải luôn là nguồn tốt nhất. Kiểm tra phản hồi ban đầu và các khối <script type="application/ld+json"> trước vì dữ liệu sản phẩm có cấu trúc thường ổn định hơn so với các lớp trình bày. Nếu dữ liệu cần thiết chỉ xuất hiện sau khi render, hãy sử dụng trình duyệt và chờ một phần tử sản phẩm có ý nghĩa thay vì ngủ một khoảng thời gian tùy ý.
Kết nối với Proxy Đúng
Chọn vị trí và chế độ phiên phù hợp với quy trình làm việc của bạn, sau đó kết nối qua Nstdata.
Phương Pháp 1: Trích xuất JSON-LD từ trang sản phẩm được phép
Bước 1: Lấy một URL với một client có giới hạn
Sử dụng một user agent mô tả, một thời gian chờ, giới hạn chuyển hướng, và tỷ lệ yêu cầu thấp. URL mục tiêu phải đến từ kho hàng đã được phê duyệt của bạn.
import os
import httpx
url = os.environ["TARGET_URL"]with httpx.Client(timeout=20, follow_redirects=True)as client: response = client.get(url, headers={"User-Agent":"CatalogQA/1.0 contact@example.com"}) response.raise_for_status() html = response.text
Bước 2: Phân tích JSON-LD của sản phẩm
import json
from bs4 import BeautifulSoup
soup = BeautifulSoup(html,"html.parser")products =[]for node in soup.select('script[type="application/ld+json"]'):try: value = json.loads(node.string or"")except json.JSONDecodeError:continue values = value ifisinstance(value,list)else[value] products.extend(x for x in values ifisinstance(x,dict)and x.get("@type")=="Product")ifnot products:raise RuntimeError("Không tìm thấy Product JSON-LD; kiểm tra phản hồi trước khi thay đổi bộ chọn")
Bước 3: Chuẩn hóa mà không phát minh ra giá trị
Chỉ ánh xạ các trường hiện có. Bảo tồn chuỗi giá gốc và tiền tệ, và sử dụng None cho dữ liệu không có sẵn. Không bao giờ suy luận kích thước hoặc trạng thái kho từ một nút vắng mặt.
Phương Pháp 2: Hiển thị trang với Playwright
Bước 1: Khởi động một ngữ cảnh trình duyệt có giới hạn
import os
from playwright.sync_api import sync_playwright
with sync_playwright()as p: browser = p.chromium.launch(headless=True) page = browser.new_page(locale="en-GB", viewport={"width":1440,"height":1000}) page.goto(os.environ["TARGET_URL"], wait_until="domcontentloaded", timeout=30000) page.locator('script[type="application/ld+json"]').first.wait_for(timeout=10000) rendered_html = page.content() browser.close()
Bước 2: Phát hiện trạng thái trang sai
Kiểm tra URL cuối cùng, tiêu đề trang, định danh sản phẩm mong đợi, ngôn ngữ địa phương, và sự hiện diện của chứng cứ sản phẩm. Loại bỏ các trang chỉ đồng ý, đăng nhập, thử thách, và lỗi chung. Tài liệu Playwright Python chính thức là nguồn thông tin cho việc cài đặt và API chờ hiện tại.
Bước 3: Lưu một hiện vật đánh giá
Lưu một ảnh chụp màn hình hoặc băm HTML cho các lỗi, nhưng áp dụng giới hạn lưu trữ. Các hiện vật đánh giá nên giúp chẩn đoán một sự thay đổi bộ chọn hoặc hiển thị mà không trở thành một bản sao không kiểm soát của trang.
Phương Pháp 3: Sử dụng API thu thập có quản lý để thu nhận
Bước 1: Giữ việc thu nhận tách biệt khỏi phân tích
Sử dụng Nstdata Crawl khi việc hiển thị có quản lý, trạng thái tác vụ, và giao hàng hiện vật hữu ích hơn là sở hữu những công nhân trình duyệt. Chỉ gửi các URL công khai đã được phê duyệt, yêu cầu bộ định dạng nhỏ nhất, và kiểm tra sự thành công ở cấp độ thân thể thay vì giả định phản hồi HTTP thành công có nghĩa là sản phẩm đã được tải.
Bước 2: Xác nhận hiện vật trả về
Xác nhận URL chính thức, chứng cứ sản phẩm, ngôn ngữ địa phương, tiền tệ, và tính đầy đủ nội dung trước khi phân tích. Kiểm tra mô hình định giá Crawl hiện tại khi ước lượng chi phí trên mỗi sản phẩm được chấp nhận thay vì chi phí trên mỗi URL đã gửi.
Bước 3: Cung cấp cùng một lớp chuẩn hóa
Các phương pháp HTTP, Playwright, và có quản lý nên sản xuất cùng một bản ghi nguồn nội bộ. Các trường cụ thể của nhà cung cấp thuộc về bộ điều hợp thu nhận, không phải trong bảng catalog hạ nguồn.
Tại sao trình thu thập Zalando trả về dữ liệu trống hoặc không nhất quán?
Dữ liệu trống thường có nghĩa là phản hồi là một trạng thái trang khác, trường đã chuyển vào JSON nhúng, ngôn ngữ địa phương đã chuyển hướng, hoặc nội dung yêu cầu hiển thị. So sánh response.url, trạng thái, tiêu đề, độ dài thân thể, và một băm đã lưu. Nếu Playwright tìm thấy trường nhưng HTTP không, hãy kiểm tra các yêu cầu mạng được ủy quyền trước khi thêm nhiều tương tác với trình duyệt.
Giá cả không nhất quán thường đến từ ngữ cảnh địa phương, tiền tệ, chương trình khuyến mãi, thành viên, hoặc biến thể. Lưu trữ những chiều kích đó với mỗi quan sát. Hướng dẫn pipeline giám sát giá cả của Nstdata cho thấy tại sao các đề nghị chuẩn hóa cần có nguồn gốc và quy tắc chấp nhận.
Làm thế nào để bạn làm cho trình thu thập an toàn và dễ duy trì?
Sử dụng hàng đợi có giới hạn, độ đồng thời thấp, chỉ thử lại các lỗi tạm thời và dừng lại khi từ chối kéo dài. Phiên bản hóa trình phân tích, giữ các thiết lập cho mỗi trạng thái trang được hỗ trợ, và cảnh báo về tỷ lệ trường bị thiếu thay vì lặng lẽ ghi null. Giao thức loại trừ Robot mô tả quy tắc robot chuẩn hóa, nhưng tuân thủ cũng yêu cầu các điều khoản, quyền riêng tư, bản quyền và xem xét nội bộ.
Kết luận
Bắt đầu với một trang sản phẩm được phép và JSON-LD, thêm Playwright chỉ khi có bằng chứng cho thấy trường cần thiết được kết xuất bởi khách hàng, và giữ việc thu thập tách biệt với việc chuẩn hóa. Xác thực địa phương, URL chuẩn và danh tính sản phẩm trước khi chấp nhận một bản ghi. Đối với công việc danh mục lớn hơn, sử dụng khám phá URL có giới hạn và danh sách kiểm tra thực tiễn tốt nhất trong web scraping. Nếu việc định tuyến qua nhiều khu vực được phê duyệt trở thành một mối quan tâm hoạt động riêng biệt, hãy xem xét Nstdata Proxy Manager mà không kết nối logic proxy với sơ đồ sản phẩm.
Trải nghiệm Nstdata — Bắt đầu dùng thử miễn phí của bạn hôm nay
Q: Việc thu thập dữ liệu từ Zalando có hợp pháp không?
Tính hợp pháp phụ thuộc vào đối tượng, phương pháp, quyền hạn, điều khoản và việc sử dụng dữ liệu. Chỉ thu thập các trang công cộng hoặc các trang được ủy quyền và nhận được hướng dẫn pháp lý cho dự án cụ thể.
Q: Trình thu thập Zalando nên sử dụng Beautiful Soup hay Playwright?
Sử dụng Beautiful Soup khi phản hồi ban đầu hoặc JSON nhúng chứa dữ liệu cần thiết; sử dụng Playwright chỉ khi việc kết xuất JavaScript là cần thiết. Điều này giúp giảm chi phí và bề mặt thất bại.
Q: Tại sao trình thu thập lại thấy một ngôn ngữ hoặc giá khác?
Chuyển hướng địa phương, cài đặt tiền tệ, địa lý, chương trình khuyến mãi và ngữ cảnh biến thể có thể thay đổi trang. Lưu trữ những chiều kích đó và từ chối các bản ghi không phù hợp với thị trường yêu cầu.
Q: Tần suất nên làm mới các trang sản phẩm là bao lâu?
Tần suất làm mới nên theo nhu cầu kinh doanh, sự biến động của trang, sự cho phép, và tải trang. Sử dụng lịch sử thay đổi để làm chậm các sản phẩm ổn định và ưu tiên những cái biến động.
Q: Làm thế nào để bạn ngăn chặn sản phẩm trùng lặp?
Sử dụng một định danh sản phẩm ổn định cộng với các chiều kích thị trường và biến thể, chuẩn hóa URL một cách thận trọng, và làm cho việc ghi trở nên đồng nhất với các băm nội dung.
Các trang được rend bằng JavaScript yêu cầu phương thức phù hợp với đường dẫn dữ liệu của chúng. Hướng dẫn này sẽ đề cập đến việc trích xuất mạng, ba phương pháp trình duyệt và việc render được quản lý.
Ivy Lin
Sep. 28th 2026
Thu thập toàn bộ trang web chỉ với một yêu cầu API
Chuyển mọi trang web thành Markdown, HTML, JSON, liên kết, PDF và hơn thế nữa mà không cần quản lý hạ tầng thu thập dữ liệu.
Tỷ lệ thành công 99,8% với kết xuất JavaScript
Nhận dữ liệu sạch, sẵn sàng cho LLM ở nhiều định dạng