關(guān)于前端HTML轉(zhuǎn)換為Markdown,發(fā)現(xiàn)了一個(gè)非常好用的npm項(xiàng)目:https://sitdown./zh-hans/
首先確保本機(jī)已經(jīng)安裝nodejs,并根據(jù)下面的文章安裝execjs并修改其源碼:
execjs執(zhí)行包含中文參數(shù)的JavaScript
https://xxmdmst.blog.csdn.net/article/details/123099139
在python所在目錄安裝sitdown:
> npm install sitdown
added 2 packages, removed 220 packages, and changed 93 packages in 4s
確保當(dāng)前目錄中已經(jīng)安裝了sitdown(至少存在node_modules目錄),我們就可以通過(guò)execjs在python中調(diào)用了:
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>📢博客主頁(yè):</span><a href="https://blog.csdn.net/as604049322"><span>https://blog.csdn.net/as604049322</span></a></p>
<p><span>📢歡迎點(diǎn)贊 👍 收藏 ?留言 📝 歡迎討論!</span></p>
<p><span>📢本文由 </span><strong><span>小小明-代碼實(shí)體</span></strong><span> 原創(chuàng),首發(fā)于 </span><strong><span>CSDN</span></strong><span>🙉</span></p>
<p><span>📢未來(lái)很長(zhǎng),值得我們?nèi)Ρ几案篮玫纳?</span></p>
</blockquote></div>"""
md = ctx.call("html2md", html)
print(md)
結(jié)果:
Node.js (V8)
> 📢博客主頁(yè):[https://blog.csdn.net/as604049322](https://blog.csdn.net/as604049322)
>
> 📢歡迎點(diǎn)贊 👍 收藏 ?留言 📝 歡迎討論!
>
> 📢本文由 **小小明-代碼實(shí)體** 原創(chuàng),首發(fā)于 **CSDN**🙉
>
> 📢未來(lái)很長(zhǎng),值得我們?nèi)Ρ几案篮玫纳?
可以看到轉(zhuǎn)換效果還不錯(cuò),。
不過(guò)這種執(zhí)行方法耗時(shí)較長(zhǎng),每次調(diào)用都需要1秒左右的時(shí)間。
如果我們需要頻繁進(jìn)行轉(zhuǎn)換,推薦是使用node啟動(dòng)相關(guān)的http服務(wù),python直接通過(guò)requests獲取結(jié)果,。
在安裝目錄下新建html2md.js
文件,代碼如下:
var { Sitdown } = require('sitdown');
var http = require('http');
let sitdown = new Sitdown({
keepFilter: ['style'],
codeBlockStyle: 'fenced',
bulletListMarker: '-',
hr: '---',
});
// 創(chuàng)建http server,并傳入回調(diào)函數(shù):
var server = http.createServer(function (request, response) {
console.log(request.method + ': ' + request.url);
let data = '';
request.on('data', chunk => {
data += chunk; // 將接收到的數(shù)據(jù)暫時(shí)保存起來(lái)
});
request.on('end', () => {
var markdown = sitdown.HTMLToMD(data);
response.writeHead(200, {'Content-Type': 'text/html'});
// 將HTTP響應(yīng)的HTML內(nèi)容寫入response:
response.end(markdown);
});
});
// 讓服務(wù)器監(jiān)聽(tīng)18080端口:
server.listen(18080);
console.log('Server is running at http://127.0.0.1:18080/');
執(zhí)行下面的命令啟動(dòng)nodejs服務(wù):
>node html2md.js
Server is running at http://127.0.0.1:18080/
此時(shí)我們?cè)谥苯觝ttp調(diào)用:
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>📢博客主頁(yè):</span><a href="https://blog.csdn.net/as604049322"><span>https://blog.csdn.net/as604049322</span></a></p>
<p><span>📢歡迎點(diǎn)贊 👍 收藏 ?留言 📝 歡迎討論!</span></p>
<p><span>📢本文由 </span><strong><span>小小明-代碼實(shí)體</span></strong><span> 原創(chuàng),首發(fā)于 </span><strong><span>CSDN</span></strong><span>🙉</span></p>
<p><span>📢未來(lái)很長(zhǎng),值得我們?nèi)Ρ几案篮玫纳?</span></p>
</blockquote></div>"""
md = html2md(html)
print(md)
結(jié)果與上面一樣,但耗時(shí)僅15毫秒,。