我们都知道一个正常的网页,是由html+css+js组成,而其本质是一段段代码编写编译而来的。而图片是由一堆二进制数据组成的,我们该如何将网页上显示的内容导出为我们想要的图片或者pdf呢?博主闲极无聊逛遍github,发现了一个有趣的库pyppeteer,它实现了我所需要导出需求。接下来我们来看看它是怎么操作的:

安装所需要的库

pip install pillow
pip install reportlab
pip install pyppeteer

导出为图片

import os
import asyncio
from pyppeteer import launchasync def save_image(url, img_path):"""导出图片:param url: 在线网页的url:param img_path: 图片存放位置:return: """browser = await launch()page = await browser.newPage()# 加载指定的网页urlawait page.goto(url)# 设置网页显示尺寸await page.setViewport({'width': 1920, 'height': 1080})'''path: 图片存放位置clip: 位置与图片尺寸信息x: 网页截图的x坐标y: 网页截图的y坐标width: 图片宽度height: 图片高度'''await page.screenshot({'path': img_path, 'clip': {'x': 457, 'y': 70, 'width': 730, 'height': 2600}})await browser.close()if __name__ == '__main__':url = "https://www.jianshu.com/p/13dadc463f40"img_path = os.path.join(os.getcwd(), "example.png")loop = asyncio.get_event_loop()loop.run_until_complete(save_image(url, img_path))

执行完毕之后,不出意外的情况下,将会在当前目录下生成一个名为example.png的文件,那就是我们导出的图片文件!

整页导出为pdf

import os
import asyncio
from pyppeteer import launchasync def save_pdf(url, pdf_path):"""导出pdf:param url: 在线网页的url:param pdf_path: pdf存放位置:return: """browser = await launch()page = await browser.newPage()# 加载指定的网页urlawait page.goto(url)# 设置网页显示尺寸await page.setViewport({'width': 1920, 'height': 1080})'''path: 图片存放位置width: 纸张宽度,带单位的字符串height: 纸张高度,带单位的字符串'''await page.pdf({'path': pdf_path, 'width': '730px', 'height': '2600px'})await browser.close()if __name__ == '__main__':url = "https://www.jianshu.com/p/13dadc463f40"pdf_path = os.path.join(os.getcwd(), "example.pdf")loop = asyncio.get_event_loop()loop.run_until_complete(save_pdf(url, pdf_path))

执行完毕之后,不出意外的情况下,将会在当前目录下生成一个名为example.pdf的文件,那就是我们导出的pdf文件!不过这种导出有一种弊端,它是将整个网页导出为pdf,无法像图片那样支持位置参数,可以截取部分区域进行导出!因此,我对代码进行修改了一下,请看下面的"区域导出为pdf"!

区域导出为pdf

import os
import asyncio
from io import BytesIO
from PIL import Image
from pyppeteer import launch
from reportlab.pdfgen.canvas import Canvas
from reportlab.lib.utils import ImageReaderasync def save_pdf(url, pdf_path):"""导出pdf:param url: 在线网页的url:param pdf_path: pdf存放位置:return: """browser = await launch()page = await browser.newPage()# 加载指定的网页urlawait page.goto(url)# 设置网页显示尺寸await page.setViewport({'width': 1920, 'height': 1080})'''clip: 位置与图片尺寸信息x: 网页截图的x坐标y: 网页截图的y坐标width: 图片宽度height: 图片高度'''img_data = await page.screenshot({'clip': {'x': 457, 'y': 70, 'width': 730, 'height': 2600}})im = Image.open(BytesIO(img_data))page_width, page_height = im.sizec = Canvas(pdf_path, pagesize=(page_width, page_height))c.drawImage(ImageReader(im), 0, 0)c.save()if __name__ == '__main__':url = "https://www.jianshu.com/p/13dadc463f40"pdf_path = os.path.join(os.getcwd(), "example.pdf")loop = asyncio.get_event_loop()loop.run_until_complete(save_pdf(url, pdf_path))

如此,我们就可以进行区域截取导出pdf文件了!

值得注意的时,由于网络、配置以及一切不可控因素,上面几种方法都会有一定程度的出现导出错误,所以建议加上重试机制!

更多pyppeteer操作请看:https://github.com/miyakogi/pyppeteer

自此,Over~~~

Python-在线网页导出为图片或pdf相关推荐

  1. python 存储图片_使用python存储网页上的图片实例

    使用python存储网页上的图片实例 本文介绍在已知网络图片的地址下,存储图片到本地 本文例子随便选择LOFTER上一张图片,复制图片的地址,如下图所示 在Python中输入代码 import req ...

  2. android webview将网页内容导出为图片和PDF方法

    项目需求中需要把webview的网页内容导出为图片和PDF,方法如下 导出为PDF 注意: 该方法只能在API 19+可以使用 代码如下: public void printPDF() {if (Bu ...

  3. 将地图导出为图片或PDF文件

    简介 地图是以QGIS工程作为基础,提供一种工具可以方便将QGIS配置好的地图工程导出为图片或PDF文件.效果如下: 下载QQ群:610712943,1156555959(自动加群,仅供软件下载,不聊 ...

  4. 批量将网页转换成图片或PDF文档技巧分享

    工作中我们有时要将一些批量的网页转换成图片或者PDF文档格式,虽然多数浏览器具有滚动截屏或者打印输出PDF文档功能,但是如果有几十上百张网页需要处理,那也是要人命的.所以我一直想找一款能够批量处理该工 ...

  5. wkhtmltox实现网页转换成图片或pdf

    1.先下载http://download.gna.org/wkhtmltopdf/obsolete/windows/wkhtmltox-0.11.0_rc1-installer.exe,安装 2.在命 ...

  6. Python html 代码转成图片、PDF

    一.下载 1.python的imgkit.pdfkit库 pip install imgkit pip install pdfkit 2.wkhtmltopdf工具包 下载地址:https://wkh ...

  7. python爬虫网页中的图片_Python爬虫爬取一个网页上的图片地址实例代码

    本文实例主要是实现爬取一个网页上的图片地址,具体如下. 读取一个网页的源代码: import urllib.request def getHtml(url): html=urllib.request. ...

  8. PDF文件如何导出成图片,PDF如何转换成图片

    现在的pdf应用得很广泛,由于它可以不依赖操作系统的语言和字体及显示设备,阅读起来很方便.我们在工作中几乎每天都会使用到PDF文件,有时候我们需要将PDF文件导出成图片格式的文件,这样更方便我们使用. ...

  9. 使用js将网页导出为图片并下载

    项目场景: 例如:项目场景:将整个网页或者网页中的一部分导出成图片并下载到电脑客户端 下载FileSaver.js链接地址 解决方案: <div id="capture"&g ...

最新文章

  1. size_t与ssize_t
  2. Generics and Linq demo
  3. spring 使用@Async注解实现异步调用
  4. C++ STL容器——序列式容器(array、vector、deque、list)
  5. android ScrollView 控制行数
  6. linux版azure应用服务,【应用服务 App Service】解决无法从Azure门户SSH登录问题
  7. C语言为四维数组申请动态内存空间的方法(一)
  8. 今日头条打造“悟空浏览器”;AirPods 3将在中国生产;谷歌再次被罚400万卢布|极客头条...
  9. 大规模Web服务开发技术
  10. 格志AK890打印驱动安装
  11. shadowdocksc错误;端口已被占用
  12. cygwin运行flink 1.14.4 解决报错Improperly specified VM option ‘MaxMetaspaceSize
  13. css进行布局时,同一行多个元素摆放后,设置margin-right让他们之间产生间距,那么最后一个元素设置margin-right是多余的
  14. 第十五周翻译-《Pro SQL Server Internals, 2nd edition》
  15. pymysql 插入错误:Warning(1265, “Data truncated for column ‘XXXX‘ at row xxx“)
  16. yui2 datatable转换至yui3
  17. 速卖通运营之--如何通过搜索快速提升店铺流量
  18. 高数 | 【概念剖析】一元、二元微分,连续、可微、可偏导、偏导连续的超强通俗解析!
  19. QGC地面站二次开发(三)Qt 简洁地面站
  20. THREEJS实现标签,自定义样式显示标签,在场景图上动态标识一些文字方法一(css2d_label)

热门文章

  1. hp服务器的网络显示红叉,惠普笔记本白屏后重启后显示红叉网络信号联不上网的原因?...
  2. 使用Excel获取数据
  3. 表格中自动布局注意和使用自动计算行高
  4. html中 videojs 播放m3u8文件【方式一】
  5. 巨型计算机语言主要应用于,计算机应用基础知识复习题
  6. How Gradual Typing System Helps Us
  7. python爬取虎扑评论_python爬去虎扑数据信息,完成可视化
  8. 解决 SharePoint 2013 管理中心登录问题。
  9. Python&Opencv手势识别系统
  10. 仿Mac程序坞放大动画