前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >markdown导出为html_python html转word

markdown导出为html_python html转word

作者头像
全栈程序员站长
发布2022-10-04 19:30:25
1.2K0
发布2022-10-04 19:30:25
举报

大家好,又见面了,我是你们的朋友全栈君。

关于前端HTML转换为Markdown,发现了一个非常好用的npm项目:https://sitdown.mdnice.com/zh-hans/

首先确保本机已经安装nodejs,并根据下面的文章安装execjs并修改其源码:

execjs执行包含中文参数的JavaScript https://xxmdmst.blog.csdn.net/article/details/123099139

python所在目录安装sitdown:

代码语言:javascript
复制
> npm install sitdown

added 2 packages, removed 220 packages, and changed 93 packages in 4s

确保当前目录中已经安装了sitdown(至少存在node_modules目录),我们就可以通过execjs在python中调用了:

代码语言:javascript
复制
import os
import execjs

print(execjs.get().name)
js_code = """var { Sitdown } = require('sitdown'); let sitdown = new Sitdown({ keepFilter: ['style'], codeBlockStyle: 'fenced', bulletListMarker: '-', hr: '---', }); function html2md(data) { return sitdown.HTMLToMD(data) } """

ctx = execjs.compile(js_code)
html = """<div id="write" class=""><blockquote> <p><span>📢博客主页:</span><a href="https://blog.csdn.net/as604049322"><span>https://blog.csdn.net/as604049322</span></a></p> <p><span>📢欢迎点赞 👍 收藏 ⭐留言 📝 欢迎讨论!</span></p> <p><span>📢本文由 </span><strong><span>小小明-代码实体</span></strong><span> 原创,首发于 </span><strong><span>CSDN</span></strong><span>🙉</span></p> <p><span>📢未来很长,值得我们全力奔赴更美好的生活✨</span></p> </blockquote></div>"""

md = ctx.call("html2md", html)
print(md)

结果:

代码语言:javascript
复制
Node.js (V8)
> 📢博客主页:[https://blog.csdn.net/as604049322](https://blog.csdn.net/as604049322)
> 
> 📢欢迎点赞 👍 收藏 ⭐留言 📝 欢迎讨论!
> 
> 📢本文由 **小小明-代码实体** 原创,首发于 **CSDN**🙉
> 
> 📢未来很长,值得我们全力奔赴更美好的生活✨

可以看到转换效果还不错。

不过这种执行方法耗时较长,每次调用都需要1秒左右的时间。

如果我们需要频繁进行转换,推荐是使用node启动相关的http服务,python直接通过requests获取结果。

在安装目录下新建html2md.js文件,代码如下:

代码语言:javascript
复制
var { 
 Sitdown } = require('sitdown');
var http = require('http');
let sitdown = new Sitdown({ 

keepFilter: ['style'],
codeBlockStyle: 'fenced',
bulletListMarker: '-',
hr: '---',
});
// 创建http server,并传入回调函数:
var server = http.createServer(function (request, response) { 

console.log(request.method + ': ' + request.url);
let data = '';
request.on('data', chunk => { 

data += chunk;  // 将接收到的数据暂时保存起来
});
request.on('end', () => { 

var markdown = sitdown.HTMLToMD(data);
response.writeHead(200, { 
'Content-Type': 'text/html'});
// 将HTTP响应的HTML内容写入response:
response.end(markdown);
});
});
// 让服务器监听18080端口:
server.listen(18080);
console.log('Server is running at http://127.0.0.1:18080/');

执行下面的命令启动nodejs服务:

代码语言:javascript
复制
>node html2md.js
Server is running at http://127.0.0.1:18080/

此时我们在直接http调用:

代码语言:javascript
复制
import requests
def html2md(html, html2md_server="http://127.0.0.1:18080/"):
res = requests.post(html2md_server, data=html.encode("u8"))
res.encoding = "u8"
md = res.text
return md
html = """<div id="write" class=""><blockquote> <p><span>📢博客主页:</span><a href="https://blog.csdn.net/as604049322"><span>https://blog.csdn.net/as604049322</span></a></p> <p><span>📢欢迎点赞 👍 收藏 ⭐留言 📝 欢迎讨论!</span></p> <p><span>📢本文由 </span><strong><span>小小明-代码实体</span></strong><span> 原创,首发于 </span><strong><span>CSDN</span></strong><span>🙉</span></p> <p><span>📢未来很长,值得我们全力奔赴更美好的生活✨</span></p> </blockquote></div>"""
md = html2md(html)
print(md)

结果与上面一样,但耗时仅15毫秒。

image-20220224161236810
image-20220224161236810

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/196146.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年9月7日 下,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档