You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Scrapy无法获取<option>标签正确长度问题求助

解决尺码选项统计数量不符的问题

可能原因

页面部分尺码选项是通过JavaScript动态加载的,Scrapy默认抓取的是初始HTML源码,未包含JS渲染后的内容,因此只能抓到7个选项,而实际页面显示的14个是动态加载生成的。

解决方案

方案1:用JS渲染工具获取完整页面

Scrapy可集成Playwright渲染动态页面,步骤如下:

  1. 安装依赖:
    pip install scrapy-playwright
    
  2. 在项目settings.py中添加配置:
    DOWNLOAD_HANDLERS = {
        "http": "scrapy_playwright.handler.ScrapyPlaywrightDownloadHandler",
        "https": "scrapy_playwright.handler.ScrapyPlaywrightDownloadHandler",
    }
    PLAYWRIGHT_LAUNCH_OPTIONS = {"headless": True}
    
  3. 在爬虫请求中启用Playwright:
    yield scrapy.Request(
        url=your_target_url,
        callback=self.parse,
        meta={"playwright": True}
    )
    

之后执行统计代码:

len(response.selector.css('#tallas_detalle option'))

即可获取完整的14个选项。

方案2:直接抓取尺码数据的API接口

打开浏览器开发者工具(F12)切换到Network标签页,刷新页面或点击尺码下拉框,找到加载尺码数据的XHR/Fetch请求,直接请求该接口,从返回的JSON数据中提取尺码列表,这种方式比渲染页面更高效。

方案3:提取页面脚本中的JSON数据

部分网站会把尺码数据嵌入页面的<script>标签中,查看页面源码,搜索tallas等相关关键词,找到对应的JSON字符串,用正则提取后解析:

import re
import json

script_content = response.css('script:contains("tallas")::text').get()
size_data = re.search(r'var tallas = (\[.+\]);', script_content).group(1)
size_list = json.loads(size_data)
print(len(size_list))

内容的提问来源于stack exchange,提问作者Vaidas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 21:29:59