6

如何从 python 3 中的降价文件中获取元素列表?我特别有兴趣从降价文件中获取所有图像和链接的列表(以及相关信息,如替代文本和链接文本)。

是该领域的一些现有技术,但此时它几乎正好有 2 年的历史,我预计情况会发生一些变化。

如果您提出的解析器支持 multimarkdown,则可以加分。

4

2 回答 2

7

如果您利用两个 Python 包,pypandoc并且panflute,您可以在几行(示例代码)中完全以 Python 方式完成它:

给定一个文本文件example.md,并假设您已经安装了 Python 3.3+ pip install pypandoc panflute,然后将示例代码放在同一个文件夹中并从 shell 或例如 IDLE 中运行它。

import io
import pypandoc
import panflute

def action(elem, doc):
    if isinstance(elem, panflute.Image):
        doc.images.append(elem)
    elif isinstance(elem, panflute.Link):
        doc.links.append(elem)

if __name__ == '__main__':
    data = pypandoc.convert_file('example.md', 'json')
    doc = panflute.load(io.StringIO(data))
    doc.images = []
    doc.links = []
    doc = panflute.run_filter(action, prepare=prepare, doc=doc)

    print("\nList of image URLs:")
    for image in doc.images:
        print(image.url)

步骤是:

  1. 用于pypandoc获取包含markdown文档AST的json字符串
  2. 加载它panflute来创建一个 Doc 对象(panflute 需要一个流,所以我们使用 StringIO)
  3. 使用该run_filter函数迭代每个元素,并提取 Image 和 Link 对象。
  4. 然后您可以打印网址、替代文本等。
于 2016-12-07T03:55:49.140 回答
4

您可以使用Python-Markdown将 markdown 转换为 html ,然后使用Beautiful Soup从 html 文档中提取您想要的内容,这使得提取图像和链接非常简单。

这可能看起来像一个复杂的管道,但它肯定比使用正则表达式编写一个 ad hoc markdown 解析器更容易和更健壮。这些模块经过实战考验且高效。

于 2016-12-03T09:27:43.327 回答