为什么我极力推荐程序员用jupyter写文章
「N体饭」Python小课堂
作者:许立轩
简介:
分享实用、新奇、有fun的Python小知识
让您的Python功力更上一层楼吧~
为什么我极力推荐程序员用jupyter写文章
大纲
视频地址:https://www.bilibili.com/video/BV1zk4y117PS/
为什么我极力推荐程序员用Jupyter来写文章
jupyter是什么
Jupyter Notebook(此前被称为 IPython notebook)是一个交互式笔记本,支持运行 40 多种编程语言。
Jupyter Notebook 的本质是一个 Web 应用程序,便于创建和共享文学化程序文档,支持实时代码,数学方程,可视化和 markdown。 用途包括:数据清理和转换,数值模拟,统计建模,机器学习等等
我们可以通过这个链接看看免安装试用jupyter,戳这里: https://jupyter.org/try
jupyter有个重要的概念就是cell
cell有好几种类型,主要就是code(代码)和markdown两种
我们可以在code cell里面编写和执行代码,可以在markdown cell里面编写md标记或html
为什么选择jupyter
- Jupyter支持在线运行超过40多种编程语言, 包括Python, R, Julia, Java, JavaScript等主流编程语言
- Jupyter的cell不但支持编写编程语言并执行,还支持Markdown语法,简直是程序员的福音
- 可以把我们编写的文件导出成html、pdf、png、markdown等文件
- 支持幻灯片显示cell,我们不需要写了文章还得再去制作一个ppt来讲解
安装与启动jupyter
jupyter是用Python写的程序,所以我们安装jupyter前必须先安装好Python
如果还没安装好Python,可以戳这里了解一下Python的安装步骤:https://www.bilibili.com/video/BV1wi4y1G791/
安装完了Python之后,我们可以通过Python的第三方库安装工具pip来安装Jupyter
pip3 install jupyter
经过一波行云流水的输出后,我们就已经成功安装好了Jupyter了
我们进入控制台(命令行), 输入
jupyter notebook
就成功启动了jupyter notebook的web服务
然后再新建一个Python3的notebook文件ipynb,就可以开始愉快的玩耍了
jupyter导出html
我们可以将写好的ipynb文件转化为html文件
导出后的html支持复制粘贴至目前绝大多数的自媒体平台并且保留原有样式,比如:
- ****
- 微信公众号
- 360doc
上面的几个平台完美支持html的代码块、表格、引用块等标记
我们可以通过3种方式来把ipynb转为html
1.通过web端下载html,文件 -> 下载 -> HTML(.html)
2.通过jupyter nbconvert命令,我们可以更多选择性地导出html文件
# 将"目标.ipynb"转为"目标.html" jupyter nbconvert --to html 目标.ipynb # 使用--template选项指定模板为"full",这与上一句等价,因为默认模板就是"full" # "full"模板会保留html的一些样式,所以导出的html将和web端显示非常相似 jupyter nbconvert --to html --template full 目标.ipynb # 使用"basic"模板导出html文件,因为去掉了一些css样式,导出的html将会非常的简洁 # 适合嵌入网页或一些博客中 jupyter nbconvert --to html --template basic 目标.ipynb
当我们使用full模板的时候,导出时甚至可以保留jupyterthemes的主题样式,详情戳:https://www.bilibili.com/video/BV1Et4y1D7ru/ 更换notebook主题
3.通过代码更灵活地将ipynb文件导出html文件
from nbconvert import HTMLExporter from jupyter_core.paths import jupyter_config_dir def ipynb2html(ipynb_path, template='full'): """ 代码将ipynb文件转为html文件 """ # 指定模板,可以为full或basic assert template in ('full','basic'), 'template取值为full或basic' exporter = HTMLExporter(template_file=f'{template}.tpl') # 从文件名导入ipynb文件 # 注意我们指定了config_dir,如果不加的话,full模板将无法应用css样式 html, _ = exporter.from_filename(ipynb_path, {'config_dir': jupyter_config_dir()}) # 保存html内容至result.html文件 with open('result.html', 'w', encoding='utf-8') as f: f.write(html) print('done') # 将目标.ipynb转为result.html文件 ipynb2html('目标.ipynb') ipynb2html('目标.ipynb', template='basic')
jupyter导出markdown
我们可以将写好的ipynb文件转化为markdown文件
某些自媒体平台直接就支持markdown语法来编写文章,比如****博客
所以我们可以将md文件内容直接粘贴至平台内,即可发布
这样的好处是,我们文章的最终样式会由平台决定
同样有三种方式将ipynb转为md文件
1.通过web端下载markdown,文件 -> 下载 -> Markdown(.md)
2.通过jupyter nbconvert命令来转化markdown文件
通过指定 --to 选项为 markdown
jupyter nbconvert --to markdown 目标.ipynb
3.通过代码更灵活地将ipynb文件导出md文件
from nbconvert import MarkdownExporter def ipynb2md(ipynb_path): """ 代码将ipynb文件转为md文件 """ exporter = MarkdownExporter() # 从文件名导入ipynb文件 md, _ = exporter.from_filename(ipynb_path) # 保存html内容至result.md文件 with open('result.md', 'w', encoding='utf-8') as f: f.write(md) print('done') # 将目标.ipynb转为result.md文件 ipynb2md('目标.ipynb')
jupyter导出图片
如果已经将ipynb文件通过full模板转为html文件,那么我们可以通过pyppeteer这个python自动化库将html转为png图片
转为图片后,那么几乎所有的自媒体平台都能完美的显示我们的文章
包括:
- B站专栏
- 微博
- 头条号
- 百家号
- 企鹅号
因为以上平台不支持代码块、表格等md标记,对程序员非常不友好(在这里吐槽一下,勿怪)
缺点就是已经把文字用图片显示,会对推荐算法不友好,导致阅读量减少
pyppeteer是非官方puppeteer自动化库的python实现版本
我们可以通过pip安装它
pip3 install pyppeteer
pyppeteer第一次运行时,会自动下载chromium浏览器,时间可能会有些长
我们也可以主动执行下面的命令来下载浏览器
pyppeteer-install
下载完浏览器之后我们就可以愉快玩耍pyppeteer了
因为pyppeteer是异步的,我们必须用python的异步协程语法来调用它
import asyncio from pathlib import Path from pyppeteer import launch async def get_screenshot(html_path): # 通过launch,我们得到了一个浏览器实例 browser = await launch() # 通过newPage,我们得到了一个浏览器页面实例 page = await browser.newPage() # 通过goto,页面访问我们的html文件 await page.goto('file://' + str(Path(html_path).absolute())) # 通过screenshot方法来截图 # 保存图片为screenshot.png # 注意一定要加上fullPage为True,表示全网页截图 await page.screenshot({'path': 'screenshot.png', 'fullPage': True}) # 最后关闭浏览器 await browser.close() # 表示获取result.html文件的截图 asyncio.get_event_loop().run_until_complete(get_screenshot('result.html'))
这样我们就得到了一个html页面长截图了,OK
总结
- jupyter支持多种编程语言在线运行、支持markdown语法,支持幻灯片显示,还支持导出多种格式,简直爽的不要不要的
- 快来入坑jupyter,让它来提高我们的写作生产力吧