吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 11708|回复: 26
收起左侧

[Python 转载] 【分享】将当前网页保存为pdf格式文件并下载到本地

[复制链接]
云卷~云舒 发表于 2018-5-11 22:35
本帖最后由 wushaominkk 于 2018-5-14 14:13 编辑

初衷:        使用Google浏览器的打印命令时,保存下来的pdf文件中包含网页中的所有内容(左右边框和广告等),想仅把当前网页中的主体内容转成pdf格式的文件保存下来。
操作说明:
        填写URL及提取条件(浏览器中按F12,查找),预览,打印。                 
1.PNG
代码说明:
        默认可不输入提取条件,对于没有下载过的网站,会出现提示;对于已下载过的网站,有保存记录,自动关联当前网站的提取条件。
代码如下:
[Python] 纯文本查看 复制代码
import win32api
import win32con
import requests
from bs4 import BeautifulSoup
import webbrowser
import tkinter
from tkinter import filedialog
import pdfkit

# 预览
def take_body():
    global url
    global body_class
    global headers
    url = var_url.get()
    body_class = var_body.get()
    # 请求URL
    headers = {
        "Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
        "Accept-Encoding":"gzip, deflate, br",
        "User-Agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.146 Safari/537.36"
    }
    r = requests.get(url,headers = headers)
    soup = BeautifulSoup(r.content,"html.parser")
    # 提取标题
    global title
    title = soup.title.text

    # 判断该网站是否已下载转换过
    f = open("temp.txt","r")
    a = f.read()
    dict = eval(a)
    f.close()
    if url.split("/")[2] in dict:
        body_class = dict[url.split("/")[2]]
    elif body_class == "":
        win32api.MessageBox(0, "未从在该网站下载过文档,添加提取条件", "提示", win32con.MB_OK)
    # 提取正文
    if body_class != "":
        body = soup.find_all(class_= body_class)[0]

    # 对提取的内容,调用浏览器进行预览
        html_test = str(body)
        with open("html_test.html","wb")as f:
            f.write(html_test.encode("utf-8"))
        webbrowser.open("E:\Python\HtmlToPdf\HtmlToPdf_V0.7\html_test.html",new=0,autoraise=True)

# html转pdf
def htmltopdf():
    file_name = title + ".pdf"
    types = [("pdf文件", "*.pdf")]
    dest_dir = filedialog.asksaveasfilename(initialfile = file_name,filetypes = types)
    options = {"encoding": "utf-8"}
    pdfkit.from_file("html_test.html", dest_dir, options=options)

    dict = {}
    f = open("temp.txt","r")
    a = f.read()
    dict = eval(a)
    f.close()
    dict[url.split("/")[2]] = body_class
    f = open("temp.txt","w")
    f.write(str(dict))
    f.close()


# 创建窗口
root = tkinter.Tk()
root.title("HtmlToPdf")
root.geometry("300x200")

var_url = tkinter.StringVar()
var_body = tkinter.StringVar()

label_1 = tkinter.Label(root,text = "URL:").place(x=10,y=10)
text_1 = tkinter.Entry(root,textvariable = var_url).place(x=100,y=10)

label_2 = tkinter.Label(root,text = "输入提取条件:").place(x=10,y=55)
text_2 = tkinter.Entry(root,show = None,textvariable = var_body).place(x=100,y=55)
button_2 = tkinter.Button(root,text = "预览",command = take_body).place(x=250,y=50)

label_3 = tkinter.Label(root,text = "是否打印:").place(x=10,y=100)
button_3 = tkinter.Button(root,text = "是",command = htmltopdf).place(x=100,y=95)
button_3 = tkinter.Button(root,text = "否",command = root.quit).place(x=130,y=95)

root.mainloop()


代码仅是初步实现设想的功能,还有许多地方没有完善,请多多指教。

附件: HtmlToPdf_V1.0.rar (18.23 KB, 下载次数: 606)

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
TanSent + 1 + 1 用心讨论,共获提升!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| 云卷~云舒 发表于 2018-5-12 23:14
shaokui123 发表于 2018-5-12 06:12
好东西,必须顶
webbrowser.open("E:\Python\HtmlToPdf\HtmlToPdf_V0.7\html_test.html",new=0,autoraise= ...

这是路径,忘记改了,需要你自己设置了
批量的可以试试看,看你具体想要什么效果
shaokui123 发表于 2018-5-12 06:12
好东西,必须顶
webbrowser.open("E:\Python\HtmlToPdf\HtmlToPdf_V0.7\html_test.html",new=0,autoraise=True)
这句是指定路径吧
还有能不能修改成批量的
增加本地网页文件转换的
zhaoxishm 发表于 2018-5-11 22:41
geniusjoy 发表于 2018-5-11 22:51
好东西,必须顶~~~~~~~~!!!!!!
cy798 发表于 2018-5-11 22:51
直接打开网页按crtl+P即可
依旧沉沉 发表于 2018-5-11 23:30
cy798 发表于 2018-5-11 22:51
直接打开网页按crtl+P即可

直接网页邮件另存为不更好?
sp2002760 发表于 2018-5-11 23:43
谢谢楼主无私的分享 ,看起来还不错
 楼主| 云卷~云舒 发表于 2018-5-12 00:17
依旧沉沉 发表于 2018-5-11 23:30
直接网页邮件另存为不更好?

另存为以后有文件夹存储图片之类的文件,不是单一的文件,比较烦
qwertyu88 发表于 2018-5-12 00:40
headers 要自己配置的 UA host
BE一诺 发表于 2018-5-12 02:20
不错,学习了
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-17 02:53

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表