上期提到了如何获取公众号文章信息,这回就说下怎么将网页转为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:\Users\Administrator\wkhtmltox-0.12.5-1.mxe-cross-win64\wkhtmltox\bin\wkhtmltopdf.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耗时三分钟。




···  END  ···



©著作权归作者所有:来自51CTO博客作者mb5fe18ec4a4df8的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. 用Python自动化生成倒计时图片
  2. 为你的网页添加深色模式[每日前端夜话0x48]
  3. GUI实战|Python做一个文档图片提取软件
  4. 如何用Python读取Excel中图片?又如何用Python往Excel中写入图片?
  5. PySimpleGUI 进阶| 原来用Python做一个图片查看系统,还能这么简单!
  6. 『爬虫四步走』手把手教你使用Python抓取并存储网页数据!
  7. 10 行 Python 代码,批量压缩图片 500 张,简直太强大了
  8. 官方示例(十二):网页加载道路及Geoline开发ThingJS
  9. Plotly中如何保存jpeg等图片?

随机推荐

  1. 在Python中使用代理运行Selenium Webdriv
  2. Python日期和时间函数
  3. 饮冰三年-人工智能-Python-16Python基础
  4. sklearn.LabelEncoder以前从未见过的值
  5. python函数篇0-2
  6. [LeetCode] 682. Baseball Game 棒球游戏
  7. Python2.7.13,Anaconda环境下Opencv2编程b
  8. RobotFramework中加载自定义python包中的
  9. jmeter 调用python的方法三种 (还没试)
  10. 将muilti维Json数组解析为Python