如何用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
相关产品推荐
相关产品推荐

