将html转为markdown格式的难点在哪,有什么解决思路?

试过 github 上的很多开源项目,结果都很类似。对简单的 DOM 结构转的还能接受,但是页面稍稍复杂,嵌套了其他标签如 <span> <table> 这种,就很难转换好,不知道有什么方法或转换策略能缓解这种情况。

阅读 13.6k
6 个回答

span和table没有对应的markdown语法(table有变种markdown语法)

包括html的属性 class等等也没有markdown对应

所以转换的时候通常只能舍弃或者直接保留html(因为markdown支持直接内嵌html)

作为通用解决方案,我觉得很难找到更好的方法了,但聚焦到独立的场景,打比方说希望<span class="strong>word</span> => **word** 的话还是很容易实施的,可以用cheerio之类的dom工具预处理,抓span.class先转换成strong标签然后再送到开源的通用html2md实现里即可

难点在于并非所有的html都能找到对应的md表示方式,尤其是涉及到复杂的样式的时候。md是从上到下的流式布局,而现在大多数的html则可以拥有更为复杂的布局方式,所以几乎不可能实现通用的html到md解决方案,针对特定的网站页面的话可能就会相对容易一些。

值得一提的是,md兼容html,所以对于实在不能转换的部分你保留原html试试,当然前提是你需要使用能够兼容html的md解析器。(我很想在给你的回复里面写一段html的table的,但是遗憾sf的md并没有支持这个特性)你可以试试这个在线的md编辑器http://dillinger.io/

有些东西并不是可以完全等价转换的,比如说你有一个硬币,你熔化之后,单单就凭这溶化的液体,是很难复原那个硬币的

我觉得html转markdown有两大难点:
一个是markdown语言表现力不如html,也就是前面诸位说的,并非每个html标签都能找到对应的markdown语法。比如dl dd dt标签就没有对应的markdown语法。还有canvas,video之类就更不用说了。
第二个难点是html页面基本不是语义化的页面,即使页面尽可能使用语义化的标签,还是免不了为了配合视觉需要而设置冗余的标签。markdown如此流行的一大原因是它的纯文本状态和格式化后的状态基本是等价可读的。而由于css这朵奇葩的存在,html标签已经可以让dom结构完全和渲染出来的结果不是一个东西。

如果想要完成从html向markdown的转化,可以考虑先像readibility一样把网页简化成只有文档结构的内容,然后再向markdown转化。

新手上路,请多包涵

如果是简单的markdown 转为html,然后需要后期修改html内容,再次转换为markdown是很简单的,完全是对应格式的逆转化。
当然像随便给出的一段html转为markdown就很复杂了,有很多无对应格式的只能自定义去忽略或做一些合理转化。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏