保存html页面,生成PDF文件

import base64

from lxml import etree
import pdfkit
import requests
from scrapy.http import HtmlResponse


def save_pdf(title, description, content, file_path):
    html = """
<head>
    <meta charset="UTF-8">
</head>
<h1>{title}</h1>
<div style="font-size:18px;">
    <p>{description}</p>
</div>
<div>{content}</div>
"""
    dom = etree.HTML(content)
    img_node_list = dom.xpath('//img')
    for img_node in img_node_list:
        src = img_node.get('src')
        img_resp = requests.get(src, timeout=60)
        img_con = img_resp.content
        base64_data = base64.b64encode(img_con)
        s = base64_data.decode()
        src = 'data:image/png;base64,%s' % s
        img_node.set('src', src)

    content = etree.tounicode(dom.xpath('//body/*')[0], method='html')

    html = html.format(title=title, description=description, content=content)

    options = {'enable-local-file-access': None}

    pdfkit.from_string(html, file_path, options=options)


def save_url(req_url, x_path, file_path):
    res = requests.get(req_url, headers={
        'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36'
    })
    res = HtmlResponse(req_url, body=res.content.decode(), encoding="utf-8")
    save_pdf('', '', res.xpath(x_path).get(), file_path)


if __name__ == '__main__':
    save_pdf('计算ASK接收机的灵敏度',
             'RFIC幅移键控(ASK)或者叫做开关键控(OOK)接收机的灵敏度对于远程无线开门系统(RKE)、轮胎压力监视系统(TPM)、家庭自动化系统以及其它应用系统的设计者来说是一项重要的规范。这类接收机一般工作在315MHz或433MHz的频段上,但是其电路对其它载波频率也是适用的。',
             '<div></div>', 'test4.pdf')

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

m0_顺其 自然

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值