srcset 看懂了仍会抓错图?用 Python 拆解 <picture>、sizes 与 w/x 描述符
srcset 看懂了仍会抓错图用 Python 拆解picture、sizes 与 w/x 描述符很多商品页或资讯页不会只放一个img src。同一张图可能在srcset中列出 480w、800w、1200w 三个资源再用sizes描述布局宽度picture还可以按媒体条件或图片格式切换整组资源。爬虫如果只读src得到的可能只是低清回退图甚至不是最终加载的 URL。1.srcset有两种描述符w描述候选图片的固有宽度例如card-800.jpg 800w需要和sizes一起计算。x描述像素密度例如logo-2x.png 2x。使用x时src可作为默认 1x 候选。MDN 明确说w与x不应混用sizes只对w描述符起作用。浏览器会综合布局槽位、设备像素比、带宽等条件选择资源不能简单地取列表最后一项。imgsrccard-400.jpgsrcsetcard-480.jpg 480w, card-800.jpg 800w, card-1200.jpg 1200wsizes(max-width: 600px) 400px, 800pxwidth800height450alt示例卡片当小屏槽位是 400 CSS 像素时浏览器会在候选中选择接近所需宽度的资源桌面槽位 800 时800w 是更匹配的候选。width和height还能让浏览器预留比例减少图片加载时的布局跳动。2.picture先选 source再看 imgpicture里可以放多个source每个有自己的media、type或srcset浏览器跳过不匹配的 source最后使用img作为回退picturesourcesrcsethero.aviftypeimage/avifsourcesrcsethero.webptypeimage/webpimgsrchero.jpgalthero/picture静态爬虫至少要收集source[srcset]和img[src]并记录media、type与原始顺序。它可以把所有候选加入待处理集合但不能把某个候选说成“浏览器实际下载的文件”除非真的在目标浏览器环境里核验了网络请求。3. 离线选择实验下面的实验只实现一个固定的“槽位宽度乘设备像素比再取不小于需求的最小候选没有更大候选就取最大值”的教学规则不冒充完整浏览器选择算法mobile_1xPASS desktop_1xPASS mobile_2xPASS oversize_fallback_largestPASS descriptor_orderedPASS results{mobile_1x: [small.jpg, 480], desktop_1x: [medium.jpg, 800], mobile_2x: [medium.jpg, 800], oversize: [large.jpg, 1200]} checks5 environment{python: 3.13.13, platform: macOS-27.2-arm64-arm-64bit-Mach-O}代码保存为srcset_demo.py使用 Python 3.13.13、标准库运行。真实浏览器还会考虑媒体条件、格式支持、缓存和带宽偏好生产爬虫不应把上述函数当成浏览器仿真器。4. 爬虫的收集和下载边界第一步解析原始 HTML保留src、srcset、sizes、media、type和页面 URL第二步用同样的 base URL 解析相对地址第三步按站点规则、权限和频率决定是否下载。不要因为一个图片 URL 出现在源码里就推断它允许被批量抓取。还要校验描述符同一srcset不能同时把候选写成800w和2x宽度描述符应与资源固有宽度一致重复 descriptor 会导致选择不确定。下载后保存响应状态、Content-Type、尺寸和校验值避免把 HTML 错误页当图片入库。参考MDNimg的 srcset 与 sizes、MDNpicture、WHATWG HTML 图片标准。本文由 AI 辅助整理代码与输出为本机实际运行结果。

相关新闻

一看就是AI做的网页?ClaudeCode+5句提示词5分钟告别「蓝紫色」AI味儿|TaoToken统一Key实战

一看就是AI做的网页?ClaudeCode+5句提示词5分钟告别「蓝紫色」AI味儿|TaoToken统一Key实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 3:28:16 阅读更多 →
PyCharm使用SVN同步代码全流程教程:从配置到冲突处理

PyCharm使用SVN同步代码全流程教程:从配置到冲突处理

Pycharm使用SVN同步代码数据教程不知道有多少人和我一样,平时代码习惯性丢给Git管理,结果入职新公司一看,版本控制用的是SVN。PyCharm对Git的支持有多丝滑大家都知道,但一碰到SVN,难免要倒腾半天才能把代码同步流程跑通…

2026/10/11 13:27:15 阅读更多 →
DrissionPage v4.0.2双引擎机制:替代Selenium的Web自动化新选择

DrissionPage v4.0.2双引擎机制:替代Selenium的Web自动化新选择

简介:DrissionPage v4.0.2 是一款面向开发者、测试人员和运维人员的 Web 自动化集成工具,集成脚本录制、元素操作、数据处理、多线程执行与报告生成等能力,可快速完成网页自动化操作、表单填报和数据抓取,广泛应用于自动化测试、数…

2026/10/10 2:27:05 阅读更多 →

最新新闻

半监督虚假评论检测实战:Yelp数据集从数据清洗到风险分档的完整源码解析

半监督虚假评论检测实战:Yelp数据集从数据清洗到风险分档的完整源码解析

简介:这份资源面向人工智能、机器学习方向的课程设计者与期末大作业需求者,提供一套基于半监督学习的虚假评论检测完整源码,以Yelp数据集为实验对象,帮助解决标注数据稀缺场景下评论真伪识别的问题,适合具备Python基础…

2026/10/11 17:15:09 阅读更多 →
档案库房八防提质工程:微环境闭环控制一体机部署与联动方案

档案库房八防提质工程:微环境闭环控制一体机部署与联动方案

档案库房微环境闭环控制:恒湿消毒净化一体机工程实施方案物联网 盛世宏博 恒湿消毒净化一体机添加描述一、为什么需要一体机:单设备替代多设备堆叠加湿除湿消毒净化一体机传统档案库房要实现恒湿消毒净化,通常需要分别部署除湿机、加湿机、…

2026/10/11 17:15:09 阅读更多 →
Kubernetes探针配置实战:Java应用liveness、readiness与startup全解析

Kubernetes探针配置实战:Java应用liveness、readiness与startup全解析

有一次排查线上问题,某服务的 Pod 状态一直是 Running,日志也没有明显报错,但用户反馈接口大面积超时。查了半天发现是数据库连接池被慢查询占满,整个服务其实已经"假死",新进来的请求全在排队等连接。而 K8…

2026/10/11 17:14:09 阅读更多 →
机器视觉测试岗必考:手写OpenCV图像处理全流程

机器视觉测试岗必考:手写OpenCV图像处理全流程

简介:本资源为上海柏楚电子科技2024秋季校招「机器视觉测试工程师」岗位笔试真题汇编,面向准备工业视觉方向技术岗求职的应届生与转岗测试人员,聚焦机器视觉系统测试能力的综合考查。内容覆盖白盒测试逻辑、2D几何变换特性、相机成像模型&…

2026/10/11 17:14:09 阅读更多 →
YOLOv5垃圾分类识别实战:从数据标注到TensorRT部署全攻略

YOLOv5垃圾分类识别实战:从数据标注到TensorRT部署全攻略

简介:基于YOLOv5的垃圾分类识别检测项目,面向深度学习初学者与计算机视觉实践者,解决居民生活垃圾自动分类与类别定位问题。压缩包内共包含九千余个文件,其中以八千多张jpg图像、六百余个txt标注文件、近两百个xml标签以及三十个y…

2026/10/11 17:14:09 阅读更多 →
OpenCV实现白底图透明:从alpha通道原理到边缘羽化完整指南

OpenCV实现白底图透明:从alpha通道原理到边缘羽化完整指南

简介:面向图像处理入门与进阶学习者,这份压缩包围绕OpenCV白色背景移除与透明贴图主题,提供可运行的C语言工程源码及样图。通过掩模创建、阈值分割与位运算,演示如何将白色背景剔除并保留清晰轮廓,进而合成四通道图像完…

2026/10/11 17:14:09 阅读更多 →

日新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 10:45:37 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:53 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:54 阅读更多 →