【发布时间】:2015-02-28 14:17:05
【问题描述】:
我正在尝试从 Wikipedia 获取内容并使用文章的 HTML。理想情况下,我还希望能够更改内容(例如,隐藏某些信息框等)。
我可以使用mwclient获取页面内容:
>>> import mwclient
>>> site = mwclient.Site('en.wikipedia.org')
>>> page = site.Pages['Samuel_Pepys']
>>> print page.text()
{{Redirect|Pepys}}
{{EngvarB|date=January 2014}}
{{Infobox person
...
但我看不到使用 python 将这个 wikicode 转换为 HTML 的相对简单、轻量级的方法。
Pandoc 无法满足我的需求。
我可以使用 Beautiful Soup 抓取原始页面,但这似乎不是一个特别优雅的解决方案。
mwparserfromhell 可能会在此过程中有所帮助,但我无法从文档中完全判断它是否为我提供了我需要但还没有的任何东西。
我在Alternative Parsers 页面上看不到明显的解决方案。
我错过了什么?
更新: I wrote up what I ended up doing, following the discussion below.
【问题讨论】:
-
“翻译成 HTML”是什么意思?您下载的页面已经是 HTML。您可能需要更具体地说明您想要什么。
-
我以为我说得很具体。我还没有下载任何“页面”。我查询了 Wikipedia API 并获取了 MediaWiki 标记中的内容,如示例所示。我想把它翻译成 HTML。
-
啊。我懂了。好吧,如果您只是从 MediaWiki 获取内容并且它还不是您喜欢的 HTML 格式,那么您可以构建 HTML 以包含该内容。老实说 BeautifulSoup 是一个很棒的模块,我在许多应用程序中都使用过它。它已经向您传递了完整的 HTML,您可以随意修改(隐藏某些信息框等)。
-
是的,你可能是对的。令我惊讶的是,我找不到将 MediaWiki 代码转换为 HTML 的简单方法。我认为这将是一个相当普遍的需求。抓取网页,即使是像 Beautiful Soup 这样的好东西,感觉就像是最后的手段,尤其是在有 API 的情况下。
-
好吧,有一个用于抓取内容的 API,而不是用于生成 HTML 的 API,因为这与应用程序的需求高度相关。您可以构建自己的 HTML shell 并使用 API 来获取内容,只需将内容“包含”到 shell 中指定的标记中。