Python将网页转化为PDF(python网页自动长截图)

        当今互联网时代,网页已成为我们获取信息、传递知识的重要媒介。然而,有时我们可能需要将网页保存为PDF格式,以便于离线阅读、打印或分享给他人。幸运的是,利用Python编程语言,我们可以轻松地将网页转换为PDF文件。

        在本篇博客中,我将介绍如何使用Python实现将网页转换为PDF的功能,并且加上了自动长截图的特性。这意味着,无论网页有多长或多么复杂,我们都能够一次性截取整个页面并保存为PDF文件。

        为了实现这一目标,我们将使用pdfkitselenium两个Python库。pdfkit是一个强大的工具,可以将HTML文件或URL直接转换为PDF文件。而selenium则是一个自动化Web测试工具,它提供了浏览器模拟和页面操作的功能。

        在具体实现方面,我们首先需要安装相应的库和工具。然后,我们将使用selenium来加载网页并进行自动长截图,获取完整页面的截图。接下来,我们将使用pdfkit将截图保存为PDF文件。

        通过阅读本篇博客,你将学习到如何使用Python编程语言将网页转换为PDF,并且自动截取整个页面的技巧。这将为你提供一种方便、高效的方式,以便在离线环境中浏览和分享网页内容。

        无论是希望保存重要文章、学习资料,还是需要打印保存网页内容,本教程都将为你提供实用的解决方案。让我们开始吧,探索Python如何帮助我们将网页转换为PDF文件的奇妙能力!

 初次实践:python网页自动截图

步骤如下:

       (1) 安装python selenium 库,推荐使用pip快速安装最新版本 pip install selenium

       (2) 检查Chrome浏览器的版本,下载对应版本的chromedriver。

       (3) 通过地址栏里输入命令 chrome://version/

        在 CNPM Binaries Mirror 的网址上下载对应的chromedriver,下载下来的文件是一个压缩包,然后解压就会有一个exe文件,把exe文件copy下来放到chrome的同一路径下(也可直接放在python路径下),然后复制这个路径在环境配置里的系统环境path添加chromedriver的路径配置环境变量。

       (4) 编写测试代码:

from selenium import webdriver
import threading
import time
import os
import datetime

def road_situation():
    # 每隔30秒截屏一次

    t = threading.Timer(30, road_situation)
    t.start()
    # start = datetime.datetime.now()
    # print(start)
    # 初始化一个谷歌浏览器实例
    driver = webdriver.Chrome()
    driver.maximize_window()

    driver.get("https://www.sohu.com/")
    # driver.refresh()
    driver.get_screenshot_as_file(r"E:\PyCharm2017project\Atest\maintest\picture\%s.png" %time.strftime('%Y-%m-%d-%H-%M-%S',time.localtime(time.time())))
    print(os.getcwd())
    # end = datetime.datetime.now()
    # print(end)
    # print(end - start)
    driver.quit()

if __name__ == "__main__":
    road_situation()

        但截取的是打开网页后的全屏,后面下拉的页面没有截取到,没有达到想要的效果,

        如果页面较大,页面会产生上下翻页的效果,屏幕截图无法应对此种页面,截图看到的网页只有一部分。后使用selenium + phantomjs实现网页长截图可以解决这一问题。

法一:使用 selenium + phantomjs实现网页长截图

步骤如下:

        (1) 安装python selenium 库,推荐使用pip快速安装最新版本 pip install selenium

        (2) 下载phantomjs.exe,将其添加到环境变量 path 中 。方便起见可以直接放在python的安装目录根目录下。下载链接:https://phantomjs.org/download.html

         (3) 编写测试代码

from selenium import webdriver  ##从selenium库导入webdirver
import threading
import time
import os
import datetime

def road_situation():
    # 每隔30秒截屏一次

    t = threading.Timer(30, road_situation)
    t.start()
    # start = datetime.datetime.now()
    # print(start)
    # 初始化一个谷歌浏览器实例
    ##使用webdirver.PhantomJS()方法新建一个phantomjs的对象,这里会使用到phantomjs.exe,环境变量path中找不到phantomjs.exe,则会报错
    driver = webdriver.PhantomJS()
    driver.maximize_window() #设置phantomjs浏览器全屏显示

    #使用get()方法,打开指定页面。注意这里是phantomjs是无界面的,所以不会有任何页面显示
    driver.get("https://www.sohu.com/")
    # driver.refresh()
    driver.get_screenshot_as_file(r"E:\PyCharm2017project\Atest\maintest\picture\%s.png" %time.strftime('%Y-%m-%d-%H-%M-%S',time.localtime(time.time())))
    print(os.getcwd())
    # end = datetime.datetime.now()
    # print(end)
    # print(end - start)
     #关闭phantomjs浏览器,不要忽略了这一步,否则你会在任务浏览器中发现许多phantomjs进程
    driver.quit()

if __name__ == "__main__":
    road_situation()

网页转PNG图片(截取的png图片):

法二:python将网页转化为pdf:

        (1) 安装python pdfkit 库,推荐使用pip快速安装最新版本,pip install pdfkit

        (2) 下载wkhtmltopdf安装包,并且安装到电脑上,在系统Path变量中添加wkhtmltopdf的bin路径,以便于pdfkit的调用。

下载链接wkhtmltopdf

        (3) 编写测试代码

#!/usr/bin/python
# -*- coding: UTF-8 -*-
"""
@author:ZSW
@file:htmltopdf.py
@time:2020/09/14
"""
import pdfkit
import time
import datetime
def save_to_pdf(url):
    '''
    根据url,将文章保存到本地
    :param url:
    :return:
    '''
    start = datetime.datetime.now()
    print(start)
    # 本来直接调用pdfkid的from方法就可以了,但是由于我们的wkhtmltopdf安装包有点问题,一直没法搜到,所以只能用本办法,直接配置了wk的地址
    # wkhtmltopdf下载链接: https://wkhtmltopdf.org/downloads.html
    config = pdfkit.configuration(wkhtmltopdf=r'E:\htmltopdf\wkhtmltopdf\bin\wkhtmltopdf.exe')
    pdfkit.from_url(url, r"E:\PyCharm2017project\Atest\maintest\picture\%s.pdf"
                    %time.strftime('%Y-%m-%d-%H-%M-%S', time.localtime(time.time())), configuration=config)
    end = datetime.datetime.now()
    print(end)
    print(end - start)

if __name__ =='__main__':
    url = "https://www.sohu.com/"
    save_to_pdf(url)

网页转PDF文件:

法三:

注:如果不是有特别的需求,可以用Chrome浏览器将网页页面另存为PDF的功能,步骤如下:

        (1) 打开需要转为PDF的网页;

        (2) 右击鼠标按键——选择‘打印’——再选择‘另存为PDF’——点击‘保存即可’。

        (3) 打开保存的pdf查看,其效果和法二实现的一样。

小结:经过简单实践,两种方法都能够实现网页自动长截图,但使用方法二的效率更高些,运行时间较法一短。但对于像搜狐首页这种长下拉的网页,截取的pdf(图片)中 有些图片未加载出来。

参考链接:[286]python将html转化为pdf_周小董的博客-CSDN博客

                  Python 实现网页自动截图的示例讲解_python_脚本之家

  • 4
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Steven灬

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

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

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

打赏作者

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

抵扣说明:

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

余额充值