整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

牛逼!40行Python代码把html网页保存为pdf,太方便了

近临近开学了,大家都在忙着准备各种学习的资料,准备在新的学期好好学习,充实自己。小编身边的同学也是如此,最近,小编的同学小丽就遇到了一个很棘手的问题。

她想将一个网页的Python学习的教程打印下来,方便自己来学习,但是上千页的教程,如果通过手动的方式,一个一个的去转成pdf并保存到本地,实在是麻烦的不。

这就是一个html转pdf的问题,其实网上有很多不错的html资源,但是苦于学习起来,不方便!于是小编就跟小丽保证,这点小事包在我身上。今天,小编就跟分享一下如何用Python把html资料变成pdf。

01.抓取的学习资料

如今网上的在线学习资料可谓是多如牛毛,为了方便讲解,小编就利用python3.9.2的中文文档作为演示的例子,来将其抓取并保存到本地,其网页链接如下:

https://docs.python.org/zh-cn/3.9/tutorial/index.html

打开上述链接后,大家会在网页中找到不同内容的链接地址,包括了基础的python字符、python语法等内容。

02.获取网页链接

在上图中,我们需要格外关注的是红色方格标注的链接,每个链接都会跳转到对应的子网页中,而在子网页中,就是我们想要保存的内容。

可以看到,上图中,在python速览子页面中,包含了我们需要提取的文字内容。所以将html内容保存为pdf的第一步便是获取到子页面的链接。由于教程大都是固定内容,因此对于教程的网页,大都采用的是静态页面,在网页源代码中可以很轻松地找到子页面的网页链接。

对于子网页的链接抓取,程序如下图所示:

程序中,通过BeautifulSoup库来解析网页源代码,然后提取所有的子页面链接地址并返回,如果抓取失败,则直接返回None


03.html转pdf

在得到子网页的链接后,接下来就是将html的子网页保存为pdf文件。小编使用的pdfkit库,pdfkit库可以将网页保存为pdf文档。首先小编来介绍一下pdfkit库的安装。

  • 下载https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6-1/wkhtmltox-0.12.6-1.mxe-cross-win64.7z 并解压到本地文件中。(后台输入:pdf) 直接获取。
  • 将解压文件中的bin文件路径添加到系统变量Path中。
  • 执行pip install pdfkit
  • 执行pip install wkhtmltopdf

按照上述的操作流程,就可以安装pdfkit库。对于pdfkit库的使用,常见的用法有以下三种:

上面的程序主要完成以下几步:

首先需要指定wkhtmltopdf.exe文件的路径;

  • 然后分别通过from_url、from_file和from_string的三种方式来保存为pdf文件;
  • 需要注意的是,from_file和from_url中的第一个参数必须是一个html的字符串或者是html文档的列表;
  • 但是小编通过程序运行发现,from_url第一个参数只能是html的字符串,不能是html的列表


因此,pdfkit库只能将子网页保存为单独的pdf文档,无法直接通过pdfkit库将所有的子网页拼接成一个完整的pdf文档,小编通过PyPDF2库中的PdfFileMerger类来实现pdf文档的拼接。程序如下图所示。

程序中首先将所有的html网页保存为单独的pdf文档,然后通过PdfFileMerger类对象来实现pdf文档的拼接。最后就可以得到全部的pdf内容。最后我们通过视频的展示,来看一下程序的效果吧。


除此之外,程序不光可以抓取python3.9的中文文档,针对其他的在线文档,只需要对获取网页链接的程序进行修改即可抓取,例如对于Flask中文文档的抓取,程序只需要按照下图进行修改,即可将Flask的在线文档保存为PDF文档。

04.总结

学习Python其实非常有趣,也很有用。因为Python有大量的现成的库,可以帮助我们把工作中的很多琐碎的烦事轻松解决。小编将上述的程序稍加修改,很快就帮阿丽搞定了教程,保存为pdf发送给了她,小编与女神的关系更拉近了一步

言:

通过前面的学习,已经知道如何打包js和json文件,

也了解了如何配置打包样式文件的loader

但是之前我们都是手动的创建html,并且手动的引入打包后的js文件,这样会有一定的不便,

因此接下来就一起看看webpack是如何处理html文件的

1. 安装使用处理html的插件

说明:

  1. webpack打包html文件资源,不是使用loader而是使用插件
  2. 使用html-webpack-plugin插件自动生成html文件

1.1 下载插件

yarn add html-webpack-plugin -D

1.2 配置插件

在webpack.config.js中配置插件说明

  1. 引入下载好的插件
  2. 在plugins中配置插件

代码如下:

// 1. 引入处理html插件,

const HtmlWebpackPlugin =

require("html-webpack-plugin")const {resolve} = require("path");module.exports = {
entry: "./src/main.js",
output:{
filename:"bundle.js",
path: resolve(__dirname,"dist")
},
module: {
rules:[
{
test: /\.css$/,
use:["style-loader","css-loader"]
}
]
},
// 配置插件
plugins:[
// 配置 处理html插件
new HtmlWebpackPlugin()
],
mode:"development"}

1.3 打包结果说明

通过webpack命令打包

  1. 会发现打包后的index.html是一个空的html文件 ,没有其他结构内容
  2. 因为插件html-webpack-plugin是自动创建一个新的html文件,并自动引入bundle.js
  3. 因此我们自己开发的index.html内容并没有处理到打包后的html文件中

配置代码如下:

const HtmlWebpackPlugin =

require("html-webpack-plugin")const {resolve} = require("path");module.exports = {
// ...

plugins:[
new HtmlWebpackPlugin({
// 配置html打包模板
template:"./src/main.html"
})
]

// ...}

2. 将我们自己写html内容插入打包后的html文件

2.1 说明

  1. src文件夹使我们开发文件夹,因此我们可能会在这个文件夹中开发html文件内容
  2. 但是html-webpack-plugin会在打包的dist目录中生成新的html文件,
  3. 新生成的文件中,不包含我们开发的html文件内容
  4. 如果我们需要将自己开发的html内容也插入到打包后的html文件中,就需要配置

2.2 在src文件中新建html,并开发内容

<body>
<div>Hello World</div></body>

2.3 在webpack.config.js配置插件

在webpack.config.js的插件html-webpack-plugin中配置html模板

将我们开发的html文件中的内容插入到plugin生成的html文件中

代码如下:

const HtmlWebpackPlugin =

require("html-webpack-plugin")const {resolve} = require("path");module.exports = {
// ...

plugins:[
new HtmlWebpackPlugin({
// 配置html打包模板
template:"./src/main.html"
})
]

// ...}

此时,打包后, 查看dist目录中index.html文件中就拥有了我们开发的内容

3. 配置本地webpack

3.1 为什么需要配置本地webpack

  1. webpack版本的不同,可能会对项目造成影响
  2. 项目是多人协同开发,如果每一个人电脑都全局安装不同的webpack,会导致项目配置出问题
  3. 因此需要配置项目本地webpack,以及配置脚本运行webpack命令

3.2 下载配置本地webpack

下载本地webpack

$ yarn add webpack webpack-cli -D

3.3 配置脚本命令

配置脚本命令使用webpack打包说明

  1. 在所有的终端里使用webpack命令,默认都是全局安装的webpack
  2. 项目为了保证统一,需要使用项目本地webpack进行打包
  3. 脚本中运行的webpack是使用本地webpack命令

在package.json中配置脚本命令

"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"build": "webpack"
},

配置完成以后就可以使用npm run build命令来使用本地webpack了

我办app是焦作市委、市政府推出的2020年十大民生幸福工程之一,是面向广大市民的一站式“互联网+”城市服务云平台。焦我办app集政务服务、公共服务、便民服务于一体,整合了该市大数据平台、政务服务业务中台、公共信用信息平台、“企业纾困360”平台和人口库、法人库、电子证照库等政务信息化建设方方面面的成果。首批整合接入19个市直部门的数据端口,在公积金、社保、不动产和大厅预约叫号、一键挪车等领域推出了5大亮点服务,涵盖在线城市服务123项。而且,焦我办app融合全市政务服务和公共服务事项,运用大数据技术提升网上政务服务能力,满足人民群众办事需求,为市民生活提供全方位的民生保障。并在多个领域推出便民利企服务,真正实现“数据多跑路,群众少跑腿”,有需要的朋友快来下载看看了。

软件功能

1、在线办事:政务大厅预约叫号、水气暖报装、公积金提取。
2、信息查询:公积金、不动产、驾驶证、违章记录等个人信息直查。
3、全新界面:界面简洁但是容易使用,重要信息可以清晰获得。
4、附近线路:精确查找附近线路,自由切换乘车站点,轻松选择乘车站点。
5、车辆信息:还有几辆车、还有几站到实时掌握,缓解您等车焦虑,避免错过车辆。

焦我办防疫报备功能

市政务服务和大数据管理局落实拓展“焦我办”平台功能这一市重点民生实事又有新举措——助力我市疫情防控,“焦我办”APP新增防疫报备功能。
为积极应对国内外区域疫情形势及元旦、春节人员流动频繁等情况,有效做到防线前移、关口内置,提升我市常态化疫情防控能力,市政务服务和大数据管理局按照市疫情防控指挥部要求,依托大数据平台和政务业务中台,以焦作城市门户APP“焦我办”为载体,近日正式上线“防疫报备”模块,以方便省外来(返)焦人员、省内涉疫地区来(返)焦人员和我市出省返回人员落实“五个报备”。
1、“五个报备”是什么
按照我市疫情防控相关要求,所有省外来(返)焦人员、省内涉疫地区来(返)焦人员和我市出省返回人员均要提前进行线上报备。“五个报备”中,因公来焦的省外人员或省内涉疫地区人员,由接待单位提前完成线上报备;个人来焦出差、旅游的省外人员或省内涉疫地区人员,由个人进行报备,所入住的酒店宾馆、游玩的景区负责指导监督其完成线上报备;从省内涉疫地区、省外回焦返乡或来焦探亲访友的人员,由个人或接待亲友进行报备,居住地所在社区(村)负责广泛宣传和指导、督促;团队来焦旅游的省外人员或省内涉疫地区人员,由个人进行报备,所入住酒店宾馆、旅行社和景区负责指导监督其完成线上报备;需离焦出省的本市人员,在出发前由个人进行报备,所在单位或社区(村)负责指导监督其提前完成线上报备。上述人员中,因身体或未配备智能手机等原因无法完成个人报备的,由履行报备指导监督责任的相关单位代为报备。
2、如何进行线上报备
据了解,线上报备需在“焦我办”APP进行。相关人员可通过手机应用市场搜索“焦我办”,下载安装“焦我办”APP,在“我的”进行注册登记和人脸识别实名认证,然后点选首页“防疫报备”模块,阅读报备类型后点击“立即报备”,再选择自身符合的报备类型并如实填写个人情况,提交后即报备成功。
据悉,为统筹疫情防控和服务企业群众办事,市政务服务和大数据管理局充分发挥大数据优势,通过整合更多服务资源、打通更多政务数据,在“焦我办”APP推出了市政务服务大厅预约叫号、一键挪车、居住证快速核发、契税缴纳全流程网办、青年人才落户补贴申报等一系列功能,实现了“让数据多跑路、让群众少跑腿”,减少了疫情防控期间的人员接触,有效助力我市疫情防控。

焦我办app登录帮助

1、收不到验证码?
由于各运营商网络环境的问题,可能会造成延迟发送,因此请耐心等待即可,无需多次点击获取哦!如3分钟内未收到短信验证码,可通过意见反馈联系我们。
2、获取验证码时,提示“验证码次数已到上限”
点击一次验证码时,由于各运营商网络环境的问题可能会造成延迟,而实际已发送多次验证码!如确实多次点击已达上限的,可以联系我们重置发送次数。
3、密码提示规则不符?
目前账号密码长度需在8-16位,且必须包含数字、大写字母、小写字母、常用符号中的三个条件。
4、账号密码忘记了怎么办?
您可以点击登录页面中的“忘记密码”,根据您的实际情况选择找回密码的方式进行找回。
5、忘记手势密码如何找回?
您可在登录界面需输入手势密码的下方,点击“重新登录”通过账号密码登录即可,登录成功后,可直接重新设置新的手势密码/指纹密码;如果不记得账号密码的话,也可通过登录界面右下角的“忘记密码”进行找回。

转载下载地址:http://www.32r.com/app/116700.html