使用BeautifulSoup 4和Pillow合并网页图片到一个PDF:一种高效的方式来处理网页图像

背景

​ 网页上的培训材料,内容全是PPT页面图片。直接通过浏览器打印,会存在只打印第一页,并且把浏览器上无效信息也打印出来情况。但目标是希望将页面图片全部打印为pdf形式。

在这里插入图片描述

实现方案

  1. 利用网页“另存为”,将页面内所有图片资源下载到本地;
  2. 利用页面html源码,解析出图片下载名与标准名之间对应关系;
  3. 格式化标准名,按文件名顺序排序;
  4. 按文件名顺序合并所有图片到一个pdf文件中。

技术点

  1. 利用BS4解析html文档
  2. 利用PIL的Image合并图片到pdf

操作步骤

  1. 打开页面并选择“另存为”。

    在这里插入图片描述

  2. 保存到F:\course目录下

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

  3. 将所有图片文件复制到tmp目录

    通过分析页面图片,所有有效图片都是后缀为JPG格式的图片。

    在这里插入图片描述

    在这里插入图片描述

  4. 运行read_html.py文件,标准化tmp目录下图片文件名

    1、使用img标签下的alt文件名替换tmp目录下文件名。(本处实现,发现下载图片文件名为src下文件名,但alt属性中文件名更便于理解和排序)

    2、将文件名中编号规整,保持3位数字。(本处实现,最大的序号为366;名称为“幻灯片2.JPG”的会显示在“幻灯片11.JPG”的后面,需要将“幻灯片2.JPG’和”幻灯片11.JPG“规整为"幻灯片002.JPG"和”幻灯片011.JPG“)

    在这里插入图片描述

  5. 运行merge_img2pdf.py文件,将tmp目录下所有图片合并成一个pdf文件

    在这里插入图片描述

    在这里插入图片描述

源代码及注释

# content of read_html.py
# 解析本地html文件,并将图片文件标准化命名
import re
import os
from bs4 import BeautifulSoupdef main():img_dict = {}soup = BeautifulSoup(open('个人中心-云阅读_希赛网.html')) # 读取另存为生成的html文件imgs = soup.find_all('img') # 获取所有img标签for img in imgs:if len(img['alt']) == 0:    # 过滤掉img标签中alt属性内容为空的字段continuereal_name = img['alt']if len(real_name) == 9:     # 标准化img文件名,全部变为"幻灯片XXX.JPG"形式real_name = real_name[0:3]+'0'+real_name[3:]elif len(real_name) == 8:real_name = real_name[0:3]+'00'+real_name[3:]img_dict[os.path.basename(img['src'])] = real_name  # 构造字典,key为下载到本地的文件名,value为易读的待修改后的文件名print(img_dict)os.chdir('tmp') # 切换到tmp目录下for old_file_name, new_file_name in img_dict.items():if os.path.exists(old_file_name):   # 若实际文件存在才进行更名try:    # 增加异常捕获,alt属性名称存在同名情况,有发生异常风险。os.rename(old_file_name,new_file_name)  # 重命令文件except:passif __name__ == "__main__":main()
# content of merge_img2pdf.py
# 遍历tmp下所有jpg文件,并在运行目录下生成pdf文件
from io import BytesIO
from PIL import Image
import osdef get_file_list():file_list = []for file in os.listdir():   # 遍历目录下所有JPG或jpg文件,并保存到file_list列表中,列表中图片顺序根据文件名称排序。if file.endswith('JPG') or file.endswith('jpg'):file_list.append(file)return file_listdef convert_to_pdf(file_list:list):sources = []output = Image.open(file_list[0])   # Image中加入第一张图片print(file_list)file_list.pop(0) # 从列表中去除第一张图片for file in file_list:file = Image.open(file) # 逐张打开图片if file.mode == "RGB":file = file.convert("RGB")sources.append(file) # 并添加到sources列表中os.chdir('..') # 返回程序运行目录output.save("output.pdf","pdf",save_all=True,append_images=sources) # 保存图片到pdf文件中,创建output时已经设置了第一张图片,append_images列表中按顺序保存了其它图片内容。def main():os.chdir('tmp') # 进入tmp目录下file_list = get_file_list()convert_to_pdf(file_list)if __name__ == "__main__":main()

后续优化

  • 目前是通过命令行方式运行,可以考虑通过pyside6做页面。
  • 当前只适配了希赛一个网站,根据后续需求增加程序的适配图片格式。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/266815.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

散点图直方图折线图的替代

散点图直方图折线图的替代 seaborn官网 数据科学数据可视化,散点图 直方图 折线图的新方法 1.hexbinplot https://seaborn.pydata.org/examples/hexbin marginals.html相当于散点图做了聚合/分箱,使数据的分布展示更明显。Library: seaborn 2.瀑布图展示…

大数据可视化推荐项目——基于Python/Django的电影评论可视化分析推荐系统的设计与实现

大数据可视化推荐项目——基于Python/Django的电影评论可视化分析推荐系统的设计与实现 技术栈:大数据爬虫/机器学习算法/数据分析与挖掘/大数据echarts可视化/Django框架/Mysql 摘要:本文介绍了一个基于大数据可视化的电影评论分析推荐系统&#xff0…

Go语言学习:第1天

一、为什么开始学go语言 我自己是做测试的,所测试项目使用的是go语言。开始学习go语言的原因有两个:一方面,为了更好的做好工作; 另一方面,为了提高自己的核心竞争力。 二、第1天学习到的内容 2.1 Go是怎么解决包依…

.NET 材料检测系统崩溃分析

Windbg 分析 1. 到底是哪里的崩溃 一直跟踪我这个系列的朋友应该知道分析崩溃第一个命令就是 !analyze -v ,让windbg帮我们自动化异常分析。 0:033> !analyze -v CONTEXT: (.ecxr) rax00000039cccff2d7 rbx00000039c85fc2b0 rcx00000039cccff2d8 rdx000000000…

超卓航科引领冷喷涂增材制造革新,推动先进核反应堆发展

近日,超卓航科凭借其卓越的冷喷涂增材制造技术,成为推动核能领域创新的重要力量。该公司利用冷喷涂工程技术,或为核反应堆的制造和修复开辟了全新的道路。 冷喷涂技术是一种颇具前景的固态粉末沉积方法,可用于涂层制造、增材制造和…

HTML2

1 HTML 1.1 骨架 <!DOCTYPE html> //html5版本标识<html><head></head><body></body> </html> 网页的根主体&#xff0c;有且仅有一个&#xff0c;HTML负责结构&#xff0c;无需关注表现&#xff0c;CSS负责表现 标签有两种表现形…

启动cad显示丢失mfc140u.dll怎么办?mfc140u.dll丢失有效解决方法分享

在CAD软件或其他软件中&#xff0c;有时候会出现由于找不到mfc140u.dll文件而无法执行代码的错误提示。这个问题可能是由于多种原因引起的&#xff0c;例如文件损坏、缺失或被病毒感染等。下面将介绍五个常见的解决方法&#xff0c;并解释mfc140u.dll丢失的原因以及该文件对CAD…

智慧水利-城市防汛调度大屏提升防汛工作的效率和准确性

近年来&#xff0c;水利自然灾害一直以层出不穷的强度和频率摧毁我们人类的家园。国内每年夏天的洪涝灾害一直困扰着长江流域地区&#xff0c;每年夏天微博上关于洪涝的热门新闻也是层出不穷。以近期出现的山西大雨为例&#xff0c;异常降雨造成山西省11个市76个县&#xff08;…

Nginx的location匹配和rewrite重写

一、location匹配 常用的正则表达式 ^ &#xff1a;匹配输入字符串的起始位置 $ &#xff1a;匹配输入字符串的结束位置 * &#xff1a;匹配前面的字符零次或多次。如“ol*”能匹配“o”及“ol”、“oll”&#xff1a;匹配前面的字符一次或多次。如“ol”能匹配“ol”及“oll…

持续集成交付CICD:GitLabCI上传Nexus制品

目录 一、实验 1.GitLabCI上传Nexus制品 2.优化GitLabCI&#xff08;引用系统变量&#xff09; 3.添加if条件判断项目类型 4.优化GitLabCI&#xff08;模板类&#xff09; 二、问题 1.GitLabCI获取jar文件失败 2. GitLabCI获取流水线项目命名空间失败 3.GItLab Packag…

centos-LAMP搭建与配置(论坛网站)

文章目录 LAMP简介搭建LAMP环境安装apache&#xff08;httpd&#xff09;安装mysql安装PHP安装php-mysql安装phpwind LAMP简介 LAMP是指一组通常一起使用来运行动态网站或者服务器的自由软件名称首字母缩写&#xff1a;Linux操作系统&#xff0c;网页服务器Apache&#xff0c;…

大模型应用_ChatGPT-Next-Web

1 用后感 这个工具&#xff0c;我也是用了好长时间&#xff0c;就是感觉如果不点亮一颗星&#xff0c;自己就不是人了的那种。 一开始在国内用 ChatGPT 非常麻烦&#xff0c;就买了一个套壳的服务&#xff0c;他使用的界面就是 ChatGPT-Next-Web&#xff0c;我和朋友们都觉得这…