inheritance swift3 vue修改样式 nginx视频 jquery遍历子元素 jq延时 oracle限制查询条数 cpm怎么计算 tomcat调优和jvm调优 mac版的matlab好用吗 java接口实现 java环境包 java创建文件 java八大基本数据类型 java网页 linux安装 crazytalk 蒙文字体 如何强行退出小米账号 彻底删除mysql kms神龙 python封装 php购物车 js包含字符串 gunzip idea导出jar包 魔兽天龙八部 安卓游戏辅助 igfxtray pp安卓助手 cad文件 linux解压 qt5下载 淘宝图片下载器 php定时任务 max2014 任务栏跑到右侧怎么办 python画散点图 unpack 剑魔刷图加点
当前位置: 首页 > 学习教程  > python

Python将网页转成pdf神器pdfkit库的使用__一蓑烟雨任平生

2021/2/7 11:06:17 文章标签: 测试文章如有侵权请发送至邮箱809451989@qq.com投诉后文章立即删除

文章目录前言先看下成果图哈一、安装必要软件二、开怼代码1.引入库2.导包3.糟糕网站4.创建对象HtP5.获取链接思路:6.获取正文内容7.循环每个内容拼接成大的页面8.开始打印内容!打印为什么不直接打印内容?那三个参数分别代表什么?9…


文章目录

  • 前言

  • 先看下成果图哈

  • 一、安装必要软件

  • 二、开怼代码


    • 打印为什么不直接打印内容?

    • 那三个参数分别代表什么?

    • 思路:

    • 1.引入库

    • 2.导包

    • 3.糟糕网站

    • 4.创建对象HtP

    • 5.获取链接


    • 6.获取正文内容

    • 7.循环每个内容拼接成大的页面

    • 8.开始打印内容!


    • 9.最后一步来个main跑起来

    • 最后,附上源码?

    • 总结



    前言

    有的网页查看起来不是很方便,于是就想到了,转成pdf转下来慢慢看?

    先看下成果图哈

    在这里插入图片描述
    最终效果就是这样子,感觉是不是很炫酷,哈哈哈


    一、安装必要软件

    wkhtmltopdf,这个工具的下载网站是:点这里

    感觉下载慢的直接加群也可以

    在这里插入图片描述

    群里工具太多,需要的随便拿
    在这里插入图片描述

    二、开怼代码

    1.引入库

    pip install pdfkit

    2.导包

    import pdfkitimport requestsfrom lxml import etreeimport re

    3.糟糕网站

    self.url = "https://www.dusaiphoto.com/article/detail/2/"

    4.创建对象HtP

    Html转Pdf简写对象名HtP,pdfkit.configuration换成自己的路径哦
    对,现在你就有对象了,不是单身了

    class HtP:def __init__(self):self.uu = 'https://www.dusaiphoto.com%s'self.url = "https://www.dusaiphoto.com/article/detail/2/"self.contents = ''self.confg = pdfkit.configuration(wkhtmltopdf=r'F:\pdf\wkhtmltopdf\bin\wkhtmltopdf.exe')self.list_url = ["https://www.dusaiphoto.com/article/detail/2/", ]def __del__(self):print("------------------------打印结束--------------------------")

    5.获取链接

    因为你要的pdf不是一个,所以要把所有界面的Html组装起来

    思路:

    • 找到第一个地址,打开后根据正则获取到每个链接

    • 这里使用什么方法不限制,Xpath?BS4?Re?随意

    • 我这里使用Re获取到每个连接,然后拼接到数组

    在这里插入图片描述

    # 获取链接def get_list_url(self):html = requests.get(self.url).content.decode('utf-8')con = \
                re.findall(r'<div class="card-text" style="overflow: hidden">(.+?)<div class="container-fluid">', html,   re.S)[0]lists = re.findall(r'<p class="mb-0 font-body">.+?<a href="(.+?)".+?class="no-underline color-lightgray"',   con, re.S)for isurl in lists:isurl = self.uu % isurl
                self.list_url.append(isurl)return self.list_url

    6.获取正文内容

    每个连接都是一个页面&#xff0c;获取内容返回即可&#xff0c;依旧三种方法&#xff0c;都可以&#xff0c;这里我用的依旧是正则Re

    # 获取正文内容def get_content(self, url):html = requests.get(url).content.decode('utf-8')content = \
                re.findall(r'<div class="mt-4">(.+?)<div class="alert alert-secondary text-muted mt-4 mb-4 font-body">',   html, re.S)[0]return content

    7.循环每个内容拼接成大的页面

            for url in urls:print(url)content = self.get_content(url)self.contents = '%s%s%s' % (self.contents, content, '<p><br><p>')

    这里的拼接用的%s%s%s,当然使用+=也没错&#xff0c;看自己喜好&#xff0c;开心就好啦

    8.开始打印内容&#xff01;

     # 保存html为pdf文档def dypdf(self, contents):contents = etree.HTML(contents)s = etree.tostring(contents).decode()print("开始打印内容&#xff01;")pdfkit.from_string(s, r'out.pdf', configuration=self.confg)print("打印保存成功&#xff01;")

    打印为什么不直接打印内容&#xff1f;

    答&#xff1a;这个问题问的好&#xff0c;直接打文字&#xff0c;你以为是打稿机&#xff1f;输入什么就进去什么&#xff1f;写入pdf肯定是2进制的写入&#xff0c;直接写汉字进去&#xff0c;计算机听不懂的

    那三个参数分别代表什么&#xff1f;

    pdfkit.from_string(s, r'out.pdf', configuration=self.confg)

    答&#xff1a;点开源码看看&#xff1f;
    在这里插入图片描述
    我还解释吗&#xff1f;写入文件&#xff0c;输出路径&#xff0c;打印程序&#xff0c;看不懂英语的百度翻译去好了&#xff0c;其他很多参数用不到&#xff0c;所以不需要写

    9.最后一步来个main跑起来

    if __name__ == '__main__':HtP().run()

    OK&#xff0c;完事

    最后&#xff0c;附上源码&#xff1f;

    哦哦&#xff0c;太占地方了&#xff0c;不上源码了&#xff0c;有兴趣的可以看我码云

    这是张张的码云项目地址呀

    总结

    代码一步步分析很到位&#xff0c;应该看的懂
    这就是Html转Pdf的所有内容了&#xff0c;俺的演讲完毕&#xff0c;谢谢大家聆听

    在这里插入图片描述


    本文链接: http://www.dtmao.cc/news_show_2000251.shtml

    附件下载

    相关教程

      暂无相关的数据...

    共有条评论 网友评论

    验证码: 看不清楚?