• 发文
  • 评论
  • 微博
  • 空间
  • 微信

用Python将HTML转为PDF。

Python进阶学习交流 2019-04-08 11:16 发文

点击上方“IT共享之家”,进行关注

回复“资料”可获赠IT学习福利

上期提到了如何获取公众号文章信息,这回就说下怎么将网页转为PDF,方便平常学习。


然后扩散一下之前一个比赛的结果(华章计算机抖音大赛)。


顺便谈谈自己对今后送书的一个想法。


另外之前的送书活动,有中奖的读者没有联系我,所以这回一并送出。


明天还会送两本书,大家也可以关注一下。



/ 01 / HTML转PDF


主要用到的库有pdfkit及wkhtmltopdf。


安装我就不说了,网上也是一堆教程,通过下面的代码也能略知一二。


需要注意的点就是,把网页转PDF的时候,需要将网页的图片下载下来,保存在本地。


然后生成网页时调用本地的图片,这样就不会出现在PDF中图片缺失的情况。


本次没有去设置详细的PDF参数,所以生成的PDF排版并不是很友好,不过还是能凑合看的。


具体转换代码如下。


import pandas as pd
import requests
import pdfkit
import os
import re

# 读取数据并清洗
df = pd.read_csv('article.csv', header=None, names=['title', 'digest', 'article_url', 'date'], encoding='gbk')
df['date'] = pd.to_datetime(df.date.values, unit='s', utc=True).tz_convert('Asia/Shanghai')
df_date = df['date'].astype(str).str.split(' ', expand=True)
df['day'] = df_date[0]
# 获取目录的绝对路径
fileDir = os.path.abspath(os.path.dirname('F:article_pdf'))

headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36 MicroMessenger/6.5.2.501 NetType/WIFI WindowsWechat QBCore/3.43.901.400 QQBrowser/9.0.2524.400",
}

proxies = {
    "https": None,
    "http": None,
}

# 设置转PDF参数
options = {
        "page-size": "Letter",
        "encoding": "UTF-8",
        "custom-header": [
            ("Accept-Encoding", "gzip")
        ]
    }

# 调用wkhtmltopdf
# confg = pdfkit.configuration(wkhtmltopdf=r"C:UsersAdministratorwkhtmltox-0.12.5-1.mxe-cross-win64wkhtmltoxinwkhtmltopdf.exe")

for title, url, date in zip(df['title'], df['article_url'], df['day']):
    print(title, url, date)
    # 替换特殊符号
    title = re.sub('[/::*?"<>|]', '', title)
    title = title.replace('', '_')
    # html文件名
    html_name = '{}/{}.html'.format('F:article_pdf', date + '_' + title)
    res = requests.get(url, headers=headers, proxies=proxies, timeout=3)
    html = res.text
    # 用?来控制正则贪婪和非贪婪匹配;(.*?) 小括号来控制是否包含匹配的关键字
    pattern = re.compile(r'data-src="http.*?"')
    result = pattern.findall(html)
    picCnt = 0
    for i in result:
        picCnt = picCnt + 1
        url = re.findall(r'"(.*?)"', i)[0]
        # 图片名
        picture_name = '{}/{}.png'.format('F:article_pdf', str(picCnt))
        # 调用本地图片
        html = html.replace(url, picture_name)
        # 获取图片内容
        r = requests.get(url)
        with open(picture_name, "wb+") as f:
            f.write(r.content)
        # 保存html文件
        html = html.replace('data-src', 'src')
        fd = open(html_name, 'w', encoding="utf-8")
        fd.write(html)
        fd.close()

    pdf_name = '{}/{}.pdf'.format('F:article_pdf', date + '_' + title)
    try:
        # html转pdf
        pdfkit.from_file(html_name, pdf_name, options=options)
    except:
        pass


最后成功生成所有文章的PDF。



这里不知是为何,生成PDF的时间挺长的,平均一个PDF耗时三分钟。



/ 02 / 比赛结果


之前公众号对华章计算机抖音大赛进行了推广,在上个礼拜比赛的结果也出来了。


这里帮出版社扩散一下比赛结果。


华章计算机抖音大赛比赛结果

华章计算机,公众号:华章计算机IT抖音王登场!首届华章计算机抖音大赛得奖作者出炉啦!


当然我也参加了,而且也获奖了,不过是参与奖,四本书。



活动参与的人并不多,一共应该就只有8个人参赛。


讲道理,900元现金以及30本书,这么丰厚的奖品,活动却没多少人参加,这值得沉思。


当然还会有第二届,届时我还会帮忙宣传,这回没有参加的小伙伴,下回一定要抓住机会。


为什么我会继续支持呢?这应该源于我之前参加的一个PPT比赛。



至今,我还留存着参与活动后的那本赠书。



书很不错,我也从中学到了不少东西。


当然最重要的是动手就有收获的道理。


种一棵树最好的时间是十年前,其次是现在。所以行动起来,绝对没错。


今后的送书活动,如果条件允许的话,也将会以一些小比赛的形式送出,敬请期待。



/ 03 /  送书


下面应该是上个礼拜的截图了,姑且就以此作为参照。



以上的读者,如果对下面这本书有兴趣的话。


可以微信联系我,先到先得,就一本。


微信联系方式可以在公众号菜单栏里找到。



一本有关Oracle数据库的书。


明天送的两本是有关Python数据分析的书,可以关注一下。



/ 04 / 总结


两期的文章代码已上传「GitHub」。


点击左下角阅读原文,即可获取。


万水千山总是情,点个「在看」行不行。


--------------------- End ---------------------

往期精彩文章推荐:

网络爬虫过程中5种网页去重方法简要介绍
【推荐】一个网站,解决你的论文下载、论文查重还有...
手把手教你抓取微博火锅信息Top3——火锅只能点三样
手把手教你用Fiddler+MongoDB抓取猫眼APP短评
Python大佬抓取房价信息带你开展多维度分析深圳房租
Python数据可视化:2018年电影分析

看完本文有收获?请转发分享给更多的人

IT共享之家



在公众号后台回复下列关键词可以免费获取相应的学习资料:

Python3、Python基础、Python进阶、网络爬虫 、书籍、

自然语言处理、数据分析、机器学习、数据结构、

大数据、服务器、Spark、Redis、C++、C、

php、mysql、java、Android


声明:本文为OFweek维科号作者发布,不代表OFweek维科号立场。如有侵权或其他问题,请及时联系我们举报。
2
评论

评论

    相关阅读

    暂无数据

    Python进阶学习交流

    专注于分Python网络爬虫、数...

    举报文章问题

    ×
    • 营销广告
    • 重复、旧闻
    • 格式问题
    • 低俗
    • 标题夸张
    • 与事实不符
    • 疑似抄袭
    • 我有话要说
    确定 取消

    举报评论问题

    ×
    • 淫秽色情
    • 营销广告
    • 恶意攻击谩骂
    • 我要吐槽
    确定 取消

    用户登录×

    请输入用户名/手机/邮箱

    请输入密码