如何从 python 3 中的降价文件中获取元素列表?我特别有兴趣从降价文件中获取所有图像和链接的列表(以及相关信息,如替代文本和链接文本)。
这是该领域的一些现有技术,但此时它几乎正好有 2 年的历史,我预计情况会发生一些变化。
如果您提出的解析器支持 multimarkdown,则可以加分。
如何从 python 3 中的降价文件中获取元素列表?我特别有兴趣从降价文件中获取所有图像和链接的列表(以及相关信息,如替代文本和链接文本)。
这是该领域的一些现有技术,但此时它几乎正好有 2 年的历史,我预计情况会发生一些变化。
如果您提出的解析器支持 multimarkdown,则可以加分。
如果您利用两个 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)
步骤是:
pypandoc
获取包含markdown文档AST的json字符串panflute
来创建一个 Doc 对象(panflute 需要一个流,所以我们使用 StringIO)run_filter
函数迭代每个元素,并提取 Image 和 Link 对象。您可以使用Python-Markdown将 markdown 转换为 html ,然后使用Beautiful Soup从 html 文档中提取您想要的内容,这使得提取图像和链接非常简单。
这可能看起来像一个复杂的管道,但它肯定比使用正则表达式编写一个 ad hoc markdown 解析器更容易和更健壮。这些模块经过实战考验且高效。