Python-在线网页导出为图片或pdf
我们都知道一个正常的网页,是由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相关推荐
- python 存储图片_使用python存储网页上的图片实例
使用python存储网页上的图片实例 本文介绍在已知网络图片的地址下,存储图片到本地 本文例子随便选择LOFTER上一张图片,复制图片的地址,如下图所示 在Python中输入代码 import req ...
- android webview将网页内容导出为图片和PDF方法
项目需求中需要把webview的网页内容导出为图片和PDF,方法如下 导出为PDF 注意: 该方法只能在API 19+可以使用 代码如下: public void printPDF() {if (Bu ...
- 将地图导出为图片或PDF文件
简介 地图是以QGIS工程作为基础,提供一种工具可以方便将QGIS配置好的地图工程导出为图片或PDF文件.效果如下: 下载QQ群:610712943,1156555959(自动加群,仅供软件下载,不聊 ...
- 批量将网页转换成图片或PDF文档技巧分享
工作中我们有时要将一些批量的网页转换成图片或者PDF文档格式,虽然多数浏览器具有滚动截屏或者打印输出PDF文档功能,但是如果有几十上百张网页需要处理,那也是要人命的.所以我一直想找一款能够批量处理该工 ...
- wkhtmltox实现网页转换成图片或pdf
1.先下载http://download.gna.org/wkhtmltopdf/obsolete/windows/wkhtmltox-0.11.0_rc1-installer.exe,安装 2.在命 ...
- Python html 代码转成图片、PDF
一.下载 1.python的imgkit.pdfkit库 pip install imgkit pip install pdfkit 2.wkhtmltopdf工具包 下载地址:https://wkh ...
- python爬虫网页中的图片_Python爬虫爬取一个网页上的图片地址实例代码
本文实例主要是实现爬取一个网页上的图片地址,具体如下. 读取一个网页的源代码: import urllib.request def getHtml(url): html=urllib.request. ...
- PDF文件如何导出成图片,PDF如何转换成图片
现在的pdf应用得很广泛,由于它可以不依赖操作系统的语言和字体及显示设备,阅读起来很方便.我们在工作中几乎每天都会使用到PDF文件,有时候我们需要将PDF文件导出成图片格式的文件,这样更方便我们使用. ...
- 使用js将网页导出为图片并下载
项目场景: 例如:项目场景:将整个网页或者网页中的一部分导出成图片并下载到电脑客户端 下载FileSaver.js链接地址 解决方案: <div id="capture"&g ...
最新文章
- size_t与ssize_t
- Generics and Linq demo
- spring 使用@Async注解实现异步调用
- C++ STL容器——序列式容器(array、vector、deque、list)
- android ScrollView 控制行数
- linux版azure应用服务,【应用服务 App Service】解决无法从Azure门户SSH登录问题
- C语言为四维数组申请动态内存空间的方法(一)
- 今日头条打造“悟空浏览器”;AirPods 3将在中国生产;谷歌再次被罚400万卢布|极客头条...
- 大规模Web服务开发技术
- 格志AK890打印驱动安装
- shadowdocksc错误;端口已被占用
- cygwin运行flink 1.14.4 解决报错Improperly specified VM option ‘MaxMetaspaceSize
- css进行布局时,同一行多个元素摆放后,设置margin-right让他们之间产生间距,那么最后一个元素设置margin-right是多余的
- 第十五周翻译-《Pro SQL Server Internals, 2nd edition》
- pymysql 插入错误:Warning(1265, “Data truncated for column ‘XXXX‘ at row xxx“)
- yui2 datatable转换至yui3
- 速卖通运营之--如何通过搜索快速提升店铺流量
- 高数 | 【概念剖析】一元、二元微分,连续、可微、可偏导、偏导连续的超强通俗解析!
- QGC地面站二次开发(三)Qt 简洁地面站
- THREEJS实现标签,自定义样式显示标签,在场景图上动态标识一些文字方法一(css2d_label)