Python解析html中图片并下载到本地 📅 发布时间:2026/7/15 20:45:10 👁️ 浏览次数: importosimportreimportrequestsfrombs4importBeautifulSoupfromurllib.parseimporturljoin,urlparsedefdownload_images_from_html(html_content,save_dir,target_size800x800,source_size228x228): 解析 HTML 中的 img src替换尺寸后下载图片。 :param html_content: HTML 字符串 :param save_dir: 图片保存的本地文件夹路径 :param target_size: 目标尺寸字符串 (例如 800x800) :param source_size: 原尺寸字符串 (例如 228x228) # 1. 创建保存目录ifnotos.path.exists(save_dir):os.makedirs(save_dir)print(f已创建目录:{save_dir})# 2. 解析 HTMLsoupBeautifulSoup(html_content,html.parser)img_tagssoup.find_all(img)ifnotimg_tags:print(未找到任何 img 标签。)returnprint(f找到{len(img_tags)}张图片开始处理...)success_count0fail_count0fori,imginenumerate(img_tags):srcimg.get(src)ifnotsrc:continue# 3. 替换尺寸逻辑# 方案 A: 简单字符串替换 (针对你明确知道的 228x228)new_srcsrc.replace(source_size,target_size)# 方案 B (可选): 如果尺寸不固定想用正则替换任意 数字x数字# pattern r\dx\d# if re.search(pattern, src):# new_src re.sub(pattern, target_size, src)# else:# new_src src # 如果没有匹配到尺寸保持原样或跳过# 4. 处理相对路径 (如果 src 是 /images/xxx.jpg需要拼接域名)# 注意这里假设你是在某个具体网页上下文中如果是纯片段可能需要手动传入 base_url# 如果 src 已经是 http 开头urljoin 不会改变它# 如果你知道基础域名建议传入 base_url 参数这里演示自动尝试获取或忽略# 为了代码健壮性如果 src 不是 http 开头你可能需要手动指定 base_urlbase_domainhttps:# --- 请替换为真实的网站域名ifnotnew_src.startswith((http://,https://)):# 使用 urljoin 智能拼接自动处理斜杠问题# 例如: urljoin(https://a.com, /b.jpg) - https://a.com/b.jpg# urljoin(https://a.com/x/, b.jpg) - https://a.com/x/b.jpgfinal_urlurljoin(base_domain,new_src)print(f[修复] 相对路径已补全:{src}-{final_url})else:final_urlnew_src# 5. 生成文件名# 获取 URL 的最后部分作为文件名防止非法字符parsed_urlurlparse(final_url)original_filenameos.path.basename(parsed_url.path)# 清理文件名中的非法字符 (可选防止 Windows 报错)# 比如去除 ? # 等后续参数带来的干扰虽然 basename 通常能处理 path 部分if?inoriginal_filename:original_filenameoriginal_filename.split(?)[0]ifnotoriginal_filenameorlen(original_filename)3:original_filenamefdefault_{i}.jpg# 【关键修改】使用补零的序号并加上下划线分隔# i:03d 表示 0-000, 9-009, 10-010safe_indexf{i:03d}filenamef{safe_index}_{original_filename}save_pathos.path.join(save_dir,filename)# 防止文件名冲突如果文件已存在添加序号base_name,extos.path.splitext(filename)counter1whileos.path.exists(save_path):save_pathos.path.join(save_dir,f{base_name}_{counter}{ext})counter1# 6. 下载图片try:headers{User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36}responserequests.get(final_url,headersheaders,timeout10)ifresponse.status_code200:withopen(save_path,wb)asf:f.write(response.content)print(f[成功]{final_url}-{save_path})success_count1else:print(f[失败] 状态码{response.status_code}:{final_url})fail_count1exceptExceptionase:print(f[错误] 下载失败{final_url}:{str(e)})fail_count1print(f\n--- 完成 ---\n成功:{success_count}, 失败:{fail_count})# 使用示例 if__name____main__:# 模拟一段 HTML 内容 (实际使用时你可以从文件读取或 requests 获取网页源码)html_sample div classimage-carousel-track vertical styletransform: translateY(0px); transition: transform 0.3s ease-in-out;div classitem img classimage srchttps://img10.360buyimg.com/pcpubliccms/s228x228_jfs/t1/394747/39/8804/109817/698c3fa7Fda89221c/00832ee3e8c5794f.jpg.avifimg classthumbnails-play-icon srchttps://img12.360buyimg.com/imagetools/jfs/t1/268427/6/7334/5868/677778bfFdfcd1873/09c35cebfaf51498.png/divdiv classitem img classimage srchttps://img10.360buyimg.com/pcpubliccms/s228x228_jfs/t1/394747/39/8804/109817/698c3fa7Fda89221c/00832ee3e8c5794f.jpg.avif/divdiv classitem currentimg classimage srchttps://img10.360buyimg.com/pcpubliccms/s228x228_jfs/t1/27093/21/22641/87924/66c6ad87Feccd4781/1d605d9572e7ee29.jpg.avif/divdiv classitem img classimage srchttps://img10.360buyimg.com/pcpubliccms/s228x228_jfs/t1/85036/13/47257/98441/66c6ad8aF8b8df9ab/8361e5b66ad4bf37.jpg.avif/divdiv classitem img classimage srchttps://img10.360buyimg.com/pcpubliccms/s228x228_jfs/t1/75578/15/28042/65311/66c6ad8bF3a9dabdf/ef8015681cbba30b.jpg.avif/divdiv classitem img classimage srchttps://img10.360buyimg.com/pcpubliccms/s228x228_jfs/t1/159827/2/44824/64504/66c6ad8cF2e38be73/9a53d4703d923589.jpg.avif/divdiv classitem div classparameterdiv classicon/divspan classtext规格参数/span/div/div/div # 配置保存路径save_directoryC:\\Users\\3主图# 执行函数# 注意如果 html_sample 中的 src 是相对路径你需要修改代码传入 base_urldownload_images_from_html(html_contenthtml_sample,save_dirsave_directory,source_size228x228,target_size800x800)
前后端分离在线小说阅读平台系统|SpringBoot+Vue+MyBatis+MySQL完整源码+部署教程 💡实话实说:C有自己的项目库存,不需要找别人拿货再加价。摘要 随着互联网技术的快速发展,传统单体架构的在线小说阅读平台逐渐暴露出性能瓶颈和扩展性不足的问题。用户对于阅读体验的要求日益提高,包括跨设备同步、个性… 2026/7/13 7:47:30
互联网大厂Java面试场景:谢飞机的搞笑历险记 互联网大厂Java面试场景:谢飞机的搞笑历险记 第一轮 面试官:谢先生,您了解JVM的工作机制吗? 谢飞机:当然了解!JVM是一个伟大的发明,它的主要工作就是让Java程序跑起来。具体来说,它有… 2026/7/13 19:16:52
国际云代理商:2026年新手上国际云 AWS 和 GCP 怎么选? 初次探索国际云服务时,面对 AWS 和 Google Cloud Platform(GCP)的庞杂服务体系,决策往往令人目眩神迷。这不仅关乎技术选型,更牵动项目启动成本、开发效率及未来拓展空间。在 2026 年云服务市场格局下,如何… 2026/7/13 7:51:24
深入解析TPS929120-Q1故障安全机制:从诊断原理到汽车LED驱动实战 1. 项目概述:为什么我们需要深入理解TPS929120-Q1的故障安全机制? 在汽车尾灯、内饰氛围灯,或是工业控制面板的指示灯设计中,LED驱动芯片的可靠性直接关系到整个系统的安全与稳定。想象一下,高速公路上行驶的汽车&… 2026/7/15 20:45:09
从并环到串环:智能车摄像头组F车模控制算法实战解析与调参心得 1. F车模控制的核心挑战与解决思路F车模(万向轮结构)与传统的C车模(舵机双电机结构)在控制逻辑上存在本质差异。最显著的特点是F车模的转向和速度控制都依赖于两个电机,这种执行机构耦合会带来三个典型问题:… 2026/7/15 20:45:09
链表和红黑树 链表与红黑树:从1955年的IPL到HashMap的树化——起源、相同与区别想听听这两个结构是怎么来的,历史渊源能不能串起来。好,今天咱们就玩一次“技术考古”,从1955年的磁带机时代开始,一直聊到Java 8里HashMap那个经典的树… 2026/7/15 20:43:08
C#与OpenTK实战:从零构建可交互三维地球模型 1. 项目概述:为什么用C#和OpenTK来“捏”一个地球?如果你是一名C#开发者,想在自己的桌面应用里嵌入一个能转、能看、能交互的三维地球,但又不想被Unity、Unreal这类重型游戏引擎的庞大生态和复杂概念吓退,那么OpenTK几… 2026/7/15 20:43:08
MySQL索引详解:什么是索引?为什么能提升查询效率? 前言只要学MySQL,索引是性能优化的核心。很多新手只知道“加索引查询快”,但完全不懂:索引到底是什么?为什么能提速?不加索引为什么慢?这篇文章用通俗白话图书馆类比底层原理,零基础彻底搞懂索引… 2026/7/15 20:35:04
高端品牌官网怎么做出质感?页面设计与转化布局实战建议,全程零代码,BBWEYY:AI+SAAS+GEO模式 一、为什么企业要先搭建自己的官网在 奢侈品箱包腕表销售 赛道里,企业真正缺的往往不是一个“能展示”的网站,而是一套能持续成交、能承接流量、能沉淀客户的线上增长系统。BBWEYY 的 AISAASGEO 模式,本质上就是把“建站、运营、获客”三件事… 2026/7/15 20:33:03
行星减速机的工作原理是什么?从齿轮运动关系到减速比计算 一、行星齿轮机构的组成 标准行星齿轮机构主要包括: 太阳轮; 行星轮; 内齿圈; 行星架。 太阳轮位于机构中心。 多个行星轮围绕太阳轮均匀布置,行星轮内侧与太阳轮外啮合,外侧与内齿圈内啮合。 行星轮通过轴… 2026/7/15 0:03:00
阅读Java开源框架源码的心得分享! 前几日闲来无事有幸看到了一位博主分享自己阅读开源框架源码的心得,看了之后也引发了我的一些深度思考。我们为什么要看源码?我们该怎么样去看源码? 其中前者那位博主描述的我觉得很全了(如下图所示),就不做… 2026/7/15 0:03:00
【LINUX】驱动 【LINUX驱动】【字符设备】【中断】【Platform】【网课 设备树】【GPIO】【PINCTRL】【INPUT】【IIC】【SPI】【网络驱动】【屏幕驱动】【一 设备树】【二 内核模块编译】【三 基本驱动框架】【四 Platform总线设备驱动框架】【五 驱动子系统】【六 综合】 2026/7/15 0:07:01
Git reset 与 revert 深度对比:5个关键差异与 3 种典型应用场景 Git Reset 与 Revert 深度对比:5个关键差异与3种典型应用场景在团队协作开发中,代码版本管理如同行走钢丝——一步失误可能导致整个项目陷入混乱。作为Git进阶用户,你是否曾在深夜面对错误的提交束手无策?是否在强制推送后收到同事… 2026/7/13 8:31:55
GitHub 学生包申请避坑:5个常见失败原因与开发者工具调试方案 GitHub 学生包申请技术排障指南:5个高频失败场景与开发者工具实战方案第一次尝试申请GitHub学生包时,我盯着屏幕上那个不断转圈的加载动画整整15分钟,最终只等来了一行冰冷的错误提示。这可能是许多开发者共同的经历——明明按照教程操作&… 2026/7/14 18:25:04
冒烟测试用例设计规范:5%-10%覆盖率下的3类核心场景与执行标准 冒烟测试用例设计的黄金法则:5%-10%覆盖率下的精准筛选策略在快节奏的敏捷开发环境中,冒烟测试作为质量保障的第一道防线,其重要性不言而喻。当测试资源有限而时间紧迫时,如何从海量测试用例中精准筛选出那关键的5%-10%࿰… 2026/7/14 5:09:41