使用Scrapy无法获取<option>标签正确长度问题求助
解决尺码选项统计数量不符的问题
可能原因
页面部分尺码选项是通过JavaScript动态加载的,Scrapy默认抓取的是初始HTML源码,未包含JS渲染后的内容,因此只能抓到7个选项,而实际页面显示的14个是动态加载生成的。
解决方案
方案1:用JS渲染工具获取完整页面
Scrapy可集成Playwright渲染动态页面,步骤如下:
- 安装依赖:
pip install scrapy-playwright - 在项目
settings.py中添加配置:DOWNLOAD_HANDLERS = { "http": "scrapy_playwright.handler.ScrapyPlaywrightDownloadHandler", "https": "scrapy_playwright.handler.ScrapyPlaywrightDownloadHandler", } PLAYWRIGHT_LAUNCH_OPTIONS = {"headless": True} - 在爬虫请求中启用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
相关产品推荐
相关产品推荐

