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

如何用Python编写Web Scraper从本地C盘HTML网页下载png图片到本地文件夹

脚本修改方案

原脚本存在的核心问题

  • requests库不支持直接请求file://协议的本地文件路径,无法正常获取HTML内容
  • find_all查找的标签名错误,HTML中图片的标签为img,而非代表图片格式的png
  • 保存文件时没有添加图片后缀,导致导出的文件无法正常打开
  • 代码缩进错误,执行会直接报错
  • 若HTML中图片使用相对路径,直接读取src会找不到对应本地文件

修改后的完整代码

from bs4 import BeautifulSoup
import urllib.request
import os

# 配置参数
# 本地HTML文件的绝对路径
html_path = r"C:\Users\folder\folder\Desktop\folder\example.html"
# 图片保存的目标文件夹,可自行修改
save_folder = r"C:\Users\你的用户名\Documents\抓取的图片"
# 要匹配的图片alt属性,和原有需求保持一致
target_alt = "Post image"

# 提前创建保存文件夹,避免路径不存在报错
os.makedirs(save_folder, exist_ok=True)

# 直接读取本地HTML文件内容,不需要调用requests
with open(html_path, 'r', encoding='utf-8') as f:
    html_content = f.read()

# 用BeautifulSoup解析HTML
soup = BeautifulSoup(html_content, "html.parser")

# 查找所有符合条件的img标签
images = soup.find_all("img", attrs={"alt": target_alt})

number = 0
# 获取HTML文件所在的目录,用于拼接相对路径的图片地址
html_dir = os.path.dirname(html_path)

for image in images:
    image_src = image["src"]
    # 处理相对路径的图片
    if not image_src.startswith(("http://", "https://", "file://")):
        # 拼接为绝对路径
        image_src = os.path.join(html_dir, image_src)
        # 转换为file协议路径兼容urllib读取
        image_src = f"file:///{image_src.replace(os.sep, '/')}"
    
    # 获取图片后缀名,保存时保留格式
    ext = os.path.splitext(image_src)[1]
    if not ext:
        # 如果没有识别到后缀默认存为jpg
        ext = '.jpg'
    save_path = os.path.join(save_folder, f"{number}{ext}")
    
    # 下载保存图片
    urllib.request.urlretrieve(image_src, save_path)
    print(f"已保存:{save_path}")
    number += 1

print(f"全部图片抓取完成,共保存{number}张图片")

必要调整说明

  • 把html_path的内容替换成你实际的本地HTML文件路径
  • 把save_folder的内容替换成你想要保存图片的目标文件夹路径
  • 如果不需要过滤alt属性为Post image的图片,直接把find_all的参数改成soup.find_all("img")即可抓取页面所有图片

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 15:06:02