TL;DR
- 仅为您被允许收集的公共页面构建 Zalando 抓取器,并在运行之前检查该站点的当前条款和爬虫政策。
- 从一个产品 URL 开始,并在添加浏览器自动化之前提取嵌入的结构化数据。
- 仅在所需字段在 JavaScript 执行后出现时使用 Playwright;当初始响应中已经包含它们时,普通 HTTP 更快。
- 存储稳定的产品标识符、规范 URL、货币、可用性、检索时间和内容哈希,以便更新是幂等的。
- 将同意页面、区域重定向、缺失变体和访问拒绝响应视为明确的终止状态。
什么是 Zalando 抓取器,您为什么需要它?
Zalando 抓取器是一个受控程序,它读取被允许的公共产品页面,并将选定字段转换为一致的记录。当团队不想自行操作浏览器和路由时, Nstdata Crawl 可以作为一种管理采集选项,而 Python 库提供了更直接的控制。合适的用途包括内部质量保证、批准的目录研究,以及监控您的组织被授权观察的产品。
目标并不是复制整个商店。一项可靠的工作从经过批准的 URL 库和狭窄的模式开始。 电子商务产品数据指南 解释了源记录和已接受的商业记录应保持分开的原因。
在开始之前您需要什么?
您需要 Python 3.11 或更高版本、一个隔离的环境、 httpx、 beautifulsoup4,以及对于真正需要浏览器的页面所需的 Playwright。您还需要书面许可或记录的合法依据、一小组测试 URL、一个区域和货币政策,以及一个目标模式。
python -m venv .venv source .venv/bin/activate python -m pip install httpx beautifulsoup4 playwright python -m playwright install chromium
在编写选择器之前定义这些字段: product_id、 canonical_url、 name、 brand、 currency、 price_text、 availability、 color、 size_options、 retrieved_at 和 source_hash。不要收集客户、账户或结账数据。阅读 当前 Zalando 条款 和您计划访问的站点的爬虫文件以获取确切的主机和区域。
Zalando 产品页面实际上是如何工作的?
产品页面可以结合服务器渲染的 HTML、嵌入的 JSON 和客户端请求。可见的 DOM 并不总是最佳来源。首先检查初始响应和 <script type="application/ld+json"> 块,因为结构化产品数据通常比呈现类更稳定。如果所需数据仅在渲染后显示,请使用浏览器并等待有意义的产品元素,而不是任意等待一段时间。
连接到合适的代理选择适合您工作流程的位置和会话模式,然后通过Nstdata连接。 设置代理 |
粘性
客户端 Nstdata
🇺🇸美国
🇩🇪德国
🇸🇬新加坡
|
详细教程
方法 1:从允许的产品页面提取 JSON-LD
第 1 步:使用受限客户端获取一个 URL
使用描述性的用户代理、超时、重定向限制和低请求速率。目标 URL 必须来自您批准的库存。
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
第 2 步:解析产品 JSON-LD
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 if isinstance(value, list) else [value] products.extend(x for x in values if isinstance(x, dict) and x.get("@type") == "Product") if not products: raise RuntimeError("未找到产品 JSON-LD;在更改选择器之前请检查响应")
第 3 步:在不发明值的情况下进行标准化
仅映射存在的字段。保留原始价格字符串和货币,对于不可用的数据使用 None。绝不从缺失的按钮推断尺寸或库存状态。
方法 2:使用 Playwright 渲染页面
第 1 步:启动受限的浏览器上下文
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()
第 2 步:检测错误的页面状态
检查最终 URL、页面标题、预期的产品标识符、语言环境以及产品证据的存在。拒绝仅同意、登录、挑战和通用错误页面。官方 Playwright Python 文档 是当前安装和等待 API 的来源。
第 3 步:保存审核文物
保存屏幕截图或 HTML 哈希以应对失败,但要应用保留限制。审核文物应该有助于诊断选择器或渲染变化,而不会成为页面的不受控制的副本。
方法 3:使用托管爬虫 API 进行获取
第 1 步:将获取与解析分开
当托管渲染、任务状态和文物交付比拥有浏览器工作者更有用时,请使用 Nstdata Crawl。仅提交已批准的公共 URL,请求最小的格式集,并检查正文级成功,而不是假定成功的 HTTP 响应意味着产品已加载。
第 2 步:验证返回的文物
在解析之前确认规范 URL、产品证据、语言环境、货币和内容完整性。估算每个被接受产品的成本时,请检查 当前 Crawl 定价模型,而不是每个提交的 URL 成本。
第 3 步:喂给相同的标准化层
HTTP、Playwright 和托管方法应该都能生成相同的内部源记录。特定于提供商的字段应属于获取适配器,而不是下游目录表。
为什么 Zalando 爬虫返回空或不一致的数据?
空数据通常意味着响应是不同的页面状态,字段移动到嵌入的 JSON 中,语言环境被重定向,或内容需要渲染。比较 response.url、状态、标题、正文长度和保存的哈希。如果 Playwright 找到字段而 HTTP 没有,请检查授权的网络请求,然后再添加更多的浏览器交互。
不一致的价格通常来自本地、货币、促销、会员或变体上下文。将这些维度与每个观察结果一起存储。Nstdata 的 价格监控管道指南 显示了为什么规范化报价需要源头和接受规则。
如何使爬虫安全且可维护?
使用有界队列、低并发,仅重试瞬态故障,并在持续拒绝时停止。对解析器进行版本控制,为每个支持的页面状态保留固定项,并在缺少字段率上发出警报,而不是默默地写入空值。机器人排除协议 描述了标准化的机器人规则,但合规性还需要条款、隐私、版权和内部审查。
结论
从一个允许的产品页面和 JSON-LD 开始,仅在证据表明所需字段是客户端渲染时添加 Playwright,并保持收购与规范化的分离。在接受记录之前验证本地、规范 URL 和产品身份。对于更广泛的目录工作,使用有界 URL 发现和 网络爬虫最佳实践检查表。如果在多个批准地区的路由成为单独的运营问题,请考虑 Nstdata 代理管理器,而不将代理逻辑与产品架构相耦合。
体验 Nstdata — 今天开始您的免费试用
常见问题
问:爬虫抓取 Zalando 合法吗?
合法性取决于目标、方法、司法管辖区、条款和数据使用。仅收集公共或其他授权的页面,并为特定项目获取法律指导。
问:Zalando 爬虫应该使用 Beautiful Soup 还是 Playwright?
当初始响应或嵌入的 JSON 包含所需数据时使用 Beautiful Soup;仅在需要 JavaScript 渲染时使用 Playwright。这可以降低成本和失败面。
问:为什么爬虫看到不同的语言或价格?
本地重定向、货币设置、地理位置、促销和变体上下文可能会改变页面。存储这些维度,并拒绝不匹配所请求市场的记录。
问:产品页面应该多久刷新一次?
刷新频率应遵循业务需求、页面波动性、权限和网站负载。使用变更历史记录对稳定的产品进行放缓,并优先处理波动较大的产品。
问:如何防止重复产品?
使用稳定的产品标识符加上市场和变体维度,保守地规范化 URL,并使用内容哈希使写入操作幂等。





