如何高效爬取电商网站中多维度商品变体(颜色+尺寸)的详细信息

雨丽君_3745

雨丽君_3745

2026-06-12

888人浏览

原创

如何高效爬取电商网站中多维度商品变体(颜色+尺寸)的详细信息

本文介绍如何使用 Scrapy 无需渲染直接抓取 Anaconda 网站中含多种颜色与尺寸组合的商品变体数据,通过解析页面内嵌的 data-url 和 data-variant-size-code 属性,构建完整变体 URL 并提取标题、原价、促销价及规格信息。

本文介绍如何使用 scrapy 无需渲染直接抓取 anaconda 网站中含多种颜色与尺寸组合的商品变体数据,通过解析页面内嵌的 `data-url` 和 `data-variant-size-code` 属性,构建完整变体 url 并提取标题、原价、促销价及规格信息。

在电商网页中,商品常以“颜色 × 尺寸”形式提供多个变体(如 Mantis Green + 6lb、Spool Yellow + 30lb),而这些变体通常不全部静态渲染在初始 HTML 中,而是通过前端 JS 动态加载。但关键的是:Anaconda 网站将变体跳转链接以 data-url 属性形式预埋在 DOM 中,因此无需依赖 Splash 或 Selenium 等渲染工具,仅用纯 Scrapy 即可高效、稳定地遍历所有组合。

Scrapy 2.18.0
Scrapy 2.18.0

Scrapy 2.18.0 官方源码包下载,适合 Python 网页抓取、选择器解析、Item Pipeline 和异步请求调度项目升级。

下载

核心策略:分层解析 + URL 构建

  1. 颜色层优先:从主商品页提取所有 .js-variant-style-picker 元素的 data-url,每个对应一种颜色(如 /.../BP90140299-mantis-green)。Scrapy 使用 response.follow() 递归请求这些颜色专属页。
  2. 尺寸层展开:在每个颜色页中,定位 .size-variant a 元素,提取其 data-variant-size-code(如 6lb、30lb),拼接为形如 https://www.anacondastores.com/6lb?version=7 的变体 URL。
  3. 精准字段提取:最终变体页的结构高度统一——所有关键信息(标题、价格、促销价、尺寸)均编码在 #productContentWrapper > div 的 data-* 属性中,CSS 选择器简洁可靠。

完整可运行代码示例

import scrapy


class AnacondaSpider(scrapy.Spider):
    name = "anaconda"
    allowed_domains = ["www.anacondastores.com"]
    # 起始页为任意颜色变体(确保包含完整变体导航)
    start_urls = [
        "https://www.anacondastores.com/fishing/fishing-line/braid-line/shimano-kairiki-8-braid-line-150-metre-spool/BP90140299-mantis-green"
    ]

    def parse(self, response):
        # 步骤1:提取所有颜色变体URL并递归抓取
        color_urls = response.css(".js-variant-style-picker::attr(data-url)").getall()
        for url in color_urls:
            if url:  # 防空值
                yield response.follow(url, callback=self.parse)

        # 步骤2:在当前颜色页中提取所有尺寸码,并构造变体请求
        size_codes = response.css(".size-variant a::attr(data-variant-size-code)").getall()
        for code in size_codes:
            if code:
                # 注意:Anaconda 变体API需带 version 参数以保证数据完整性
                variant_url = response.urljoin(f"{code}?version=7")
                yield scrapy.Request(variant_url, callback=self.parse_size)

    def parse_size(self, response):
        item = {}
        # 所有字段均来自 data-* 属性,稳定且无需文本清洗
        item["title"] = response.css("#productContentWrapper > div::attr(data-product-name)").get()
        item["price"] = response.css("#productContentWrapper > div::attr(data-product-metric1)").get()  # 原价
        item["sale_price"] = response.css("#productContentWrapper > div::attr(data-product-price)").get()  # 促销价
        item["size"] = response.css("#productContentWrapper > div::attr(data-product-dimension13)").get()

        # 补充颜色信息(从URL路径提取,确保组合唯一性)
        color_match = re.search(r"/([^/]+)$", response.url)
        item["color"] = color_match.group(1) if color_match else "unknown"

        yield item

关键注意事项与优化建议

  • ✅ 避免 Splash:该站点变体数据完全静态化,scrapy-splash 不仅增加部署复杂度,还显著降低抓取速度与稳定性。
  • ⚠️ URL 构造严谨性:data-variant-size-code 仅为相对路径片段(如 6lb),必须使用 response.urljoin() 拼接,而非硬编码域名。
  • ? 字段可靠性验证:data-product-price 返回的是促销价(若无促销则同原价),data-product-metric1 为划线价;二者均返回字符串(如 "19.99"),后续可 float() 转换。
  • ? 组合完整性保障:因颜色页已包含全部尺寸选项,本方案天然覆盖所有 (color, size) 组合(如预期中的 Mantis Green 6lb 至 Spool Yellow 30lb),无需笛卡尔积逻辑。
  • ?️ 反爬友好实践:添加 DOWNLOAD_DELAY = 1(在 settings.py 中)及合理 USER_AGENT,遵守 robots.txt,确保长期可维护性。

通过该方法,你不仅能精准获取全部变体数据,还能大幅简化架构、提升性能,并为同类电商网站(尤其采用 data-* 驱动变体的平台)提供可复用的爬取范式。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
免费爬虫工具有哪些
免费爬虫工具有哪些

免费爬虫工具有Scrapy、Beautiful Soup、ParseHub、Octoparse、Webocton Scriptly、RoboBrowser和Goutte。更多关于免费爬虫工具的问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.10

5053

9

Python爬虫获取数据的方法
Python爬虫获取数据的方法

Python爬虫可以通过请求库发送HTTP请求、解析库解析HTML、正则表达式提取数据,或使用数据抓取框架来获取数据。更多关于Python爬虫相关知识。详情阅读本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.13

673

12

Playwright 测试失败怎么办
Playwright 测试失败怎么办

Playwright测试失败专题汇集超时、定位器匹配、浏览器提前关闭、依赖与插件配置、文件上传、SSL及Docker启动等故障文章,并介绍通过截图、报告和Trace定位错误。

2026.10.21

20

15

Playwright 页面操作指南
Playwright 页面操作指南

Playwright页面操作专题汇集元素定位、点击与输入、等待响应、多页面切换、Iframe、事件监听及文件处理的已审核文章,便于按操作场景查阅示例与常见问题。

2026.10.21

0

16

Playwright 入门教程
Playwright 入门教程

Playwright入门专题汇集测试框架安装、VS Code配置、录制脚本、编写首个用例、运行调试及查看报告的已审核文章,帮助初学者搭建端到端测试流程。

2026.10.21

0

16

OpenJDK JVM参数怎么调优
OpenJDK JVM参数怎么调优

Java应用运行缓慢,如何调整JVM参数?本专题介绍OpenJDK JVM性能调优的基本流程,涵盖性能指标确认、运行数据采集、内存配置和垃圾回收分析,帮助你先定位瓶颈,再通过对照测试验证效果,避免直接套用参数而影响应用稳定性。

2026.10.16

120

10

OpenJDK怎么配置Java开发环境
OpenJDK怎么配置Java开发环境

怎样用OpenJDK搭建开发环境?本专题介绍版本选择、下载安装、环境变量配置和编译运行验证,帮助你理清JDK的作用及基本配置流程,并通过简单程序检查环境是否可用,为后续项目开发做好准备。

2026.10.16

80

10

OpenJDK怎么部署Java应用
OpenJDK怎么部署Java应用

Java项目开发完成后,怎样部署到目标环境并正常运行?本专题介绍OpenJDK应用部署流程,涵盖运行环境准备、版本兼容检查、应用打包、启动参数配置和日志查看,帮助你理清部署前后的操作顺序,减少环境差异造成的运行问题。

2026.10.16

60

10

Revel框架模板渲染与表单验证
Revel框架模板渲染与表单验证

本专题围绕Revel框架视图层开发,介绍模板语法、变量输出、布局复用、表单提交、参数绑定与验证规则,帮助开发者完成安全规范的页面交互。

2026.10.16

40

15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Scrapy 官方文档与教程
Scrapy 官方文档与教程

共0课时 | 0人学习