当前位置: 首页 > article >正文

mhtml图片提取 百度图片下载

如果你需要找一些图片,可以先去百度一下,待相关网页加载完成后,点击保存,即可得到一个mhtml文件。这个文件里的图片会用base64进行存储,只需要找到他们并转化就可以。目前在美篇之类的网站上效果还一般,需要继续排查问题。

效果

提取图片

代码

大概分为提取所有base64、转化为图片两步。

import base64
from io import BytesIO
from PIL import Image
import os

# 从文件中提取所有符合条件的 Base64 内容
def extract_all_contents(file_path):
    contents = []
    with open(file_path, 'r', encoding='utf-8') as file:
        content_found = False
        content = []
        for line in file:
            line = line.strip()  # 去除行末尾的换行符和空格
            if content_found:
                if not line:  # 如果遇到空行,表示content结束
                    if content:  # 保存非空的 content
                        contents.append("\n".join(content))
                    content_found = False
                    content = []  # 重置 content
                else:
                    content.append(line)  # 将当前行加入 content
            elif line.startswith("Content-Location:"):
                # 读取下一行,检查是否为空行
                next_line = next(file).strip()
                if not next_line:  # 如果下一行是空行,开始读取 content 部分
                    content_found = True
    return contents

# 将 Base64 编码转换为图像
def base64_to_image(base64_string, output_image_path=None):
    try:
        # 解码 base64 字符串
        image_data = base64.b64decode(base64_string)
        
        # 将解码后的字节数据转换为图像
        image = Image.open(BytesIO(image_data))
        
        # 如果指定了输出路径,保存图像
        if output_image_path:
            image.save(output_image_path)
        
        # 返回图像对象以供进一步处理或显示
        return image
    except (base64.binascii.Error, IOError):
        # 如果解码失败或不是有效的图像数据,返回 None
        return None

# 综合使用两个函数处理文件
def process_large_file_for_images(file_path,save_path):
    # 提取所有符合条件的 Base64 内容
    all_contents = extract_all_contents(file_path)
    
    image_count = 0
    for index, content in enumerate(all_contents):
        print(f"处理第 {index + 1} 个内容...")
        # 尝试将提取的 Base64 内容转换为图像
        image = base64_to_image(content, f'output_image_{index + 1}.png')
        
        if image:
            # 如果成功生成图像,显示或进一步处理
            image_count += 1
            print(f"成功生成第 {index + 1} 个图像: output_image_{index + 1}.png")
            tmp_path=os.path.join(save_path,f" output_image_{index + 1}.png")
            image.save(tmp_path)
        else:
            print(f"第 {index + 1} 个内容无法转换为图像")
    
    if image_count == 0:
        print("未找到任何有效的图像内容")
    else:
        print(f"总共成功生成 {image_count} 个图像")

# 使用示例
file_path = r'e:\data\网页下载\ccc.txt'  # 替换为实际的文件路径
save_path=r"e:\data\网页下载"
process_large_file_for_images(file_path,save_path)

http://www.kler.cn/a/293923.html

相关文章:

  • C++初阶:类和对象(上)
  • ubuntu中apt-get的默认安装路径。安装、卸载以及查看的方法总结
  • 力扣515:在每个树行中找最大值
  • 读数据质量管理:数据可靠性与数据质量问题解决之道03数据目录
  • Web大学生网页作业成品——婚礼婚纱网页设计与实现(HTML+CSS)(6个页面)
  • STM32嵌入式闹钟系统设计与实现
  • 使用html+css+layui实现动态表格组件
  • MySQL报错:[Err] 1075 - Incorrect table definitionmysql
  • 提高开发效率的实用工具库VueUse
  • 【2024数模国赛赛题思路公开】国赛D题思路丨附可运行代码丨无偿自提
  • 数据仓库: 6- 数据仓库分层
  • AI模块在人工智能中扮演着什么样的角色
  • 【机器学习】朴素贝叶斯方法的概率图表示以及贝叶斯统计中的共轭先验方法
  • idea中配置Translation插件完成翻译功能
  • 视觉语言模型(VLMs)知多少?
  • C#基础(6)值类型和引用类型
  • 7.统一网关-Gateway
  • 前端跨域问题详解与解决方案指南
  • ArcGIS Pro SDK (十三)地图创作 3 特殊图层
  • 【优化】Nginx 配置页面请求不走缓存 浏览器页面禁用缓存
  • 深入探讨Go语言中的切片与数组操作
  • Mysql在线安全变更工具 gh-ost
  • iOS——持久化
  • adb devices找不到设备
  • 斯坦福UE4 C++课学习补充25:寻路EQS
  • Java入门:07.Java中的面向对象02