jupyter lab导出ipynb为html并且删除代码单元格

前言

最近刚好放假了,这个问题其实三四个月前我就遇到并且解决了,不过由于学校课程太多,一直搞大数据,人工智能。。。。。。没时间写博客了,虽然我写的也没啥人看没啥人点赞,刚好最近放假了,感觉这个应该对一些人也有帮助,就找个时间写下来了,下面言归正传,我接下来将会用我上一篇文章用到的数据集和生成的图表来做演示(主要是懒,不想再弄多一份新的图表了)

Jupyter lab导出html

jupyter lab可以导出成html格式,相信很多人都清楚,可以很方便地展示,传播、分享我们的作品,例如,我之前做了一个COVID-19疫情的可视化,并且我想向老师,同学展示一下我的作品,那么现在我需要将它导出为html:

jupyter lab 导出html
好,可以看到,在 File->Export Notebook As...->Export Notebook As HTML 就可以将我们的ipynb导出为html,此时会提示我们下载,我们只需要下载就行

打开我们下载后的html文件
jupyter lab 导出的html页面

可以看到除了有可交互的图表外,还有一些代码,并且代码往往比较长,对于展示给不熟悉代码的人来说,十分影响我们的效果

删除html里面的代码cell

对html页面进行分析
html页面分析

可以发现,所有cell都是给一个类名为 cell border-box-sizing text_cell rendered 的div包裹着,其中markdown输出的cell跟code输出的cell又有不同,code导出成的 cell border-box-sizing text_cell rendered 里面,还有input 和 output_wrapper两个div,这是markdown 没有的,其中很明显,class='input'的div就是包裹着code cell 的In,即我们输入代码的cell,就是我们需要删除的cell,而output_wrapper包含的就是我们代码输出的结果,即我们需要保留的

html分析2
网上很多指标不治本的方法,我看到的最多的就是用JavaScript来动态删除input,但是这并不能达到我的预期效果,用这种方法的话,一开始打开页面,还是会看到代码输入框的内容,需要等一会才会删掉。所以我决定直接从html代码入手,直接在代码里面就删除

通过上面的分析,我们可以很方便地用正则找出我们需要删除的html代码,然后删除

下面是找出 code cell的输入代码框的html的正则表达式:

r = '(\\<div class="input"\\>[\\s]*\\<div class="prompt input_prompt"\\>[^<]*</div>[\\s]*\\<div class="inner_cell"\\>[\\s]*\\<div class="input_area"\\>[\\s]<div class=" highlight hl-ipython3">[\\s\\S]+?)<div class="output_wrapper">'

由于我还想删除下面红色方框圈出来的 Out 17等提示,所以我还加了一条正则:

rr = '(<div class="prompt output_prompt">[\s\S]+?</div>)'

然后假设我们下载的html文件‘Untitled.html’,跟我们python运行环境在同一路径下,并且我们将修改后的html文件重命名为fix_Untitled.html保存在当前路径

import re

r = '(\\<div class="input"\\>[\\s]*\\<div class="prompt input_prompt"\\>[^<]*</div>[\\s]*\\<div class="inner_cell"\\>[\\s]*\\<div class="input_area"\\>[\\s]<div class=" highlight hl-ipython3">[\\s\\S]+?)<div class="output_wrapper">'
    
rr = '(<div class="prompt output_prompt">[\s\S]+?</div>)'

with open('Untitled.html') as f:
    s = f.read()

l = re.findall(r,s)
for i in l:
    s = s.replace(i,'')

l = re.findall(rr,s)
for i in l:
    s = s.replace(i,'')

with open('fix_Untitled.html','w') as f:
    f.write(s)

接下来我们看看我们修改后的html界面
fix_Untitled

可以看到目前只剩下我们的markdown代码和python代码输出的图表了

我们还可以修改notebook的宽度大小,只需要在fix_Untitled.html 找到对应位置就可以修改啦,这里就不说了

posted @ 2020-07-30 16:56  DotLink  阅读(2111)  评论(1编辑  收藏  举报