1

在 joksnet 程序的帮助下,设法获得了我正在寻找的纯文本 Wikipedia 文章。

返回的文本包括标题的 Wiki 标记,例如,Albert Einstein 文章的部分返回如下:

==Biography==

===Early life and education===
blah blah blah

我真正想做的是将检索到的文本提供给一个函数,并将所有顶级部分包装在粗体 html 标记中,并将二级部分包装为斜体,如下所示:

<b>Biography</b>

<i>Early life and education</i>
blah blah blah

但恐怕我什至不知道如何开始,至少不会使功能变得幼稚。我需要使用正则表达式吗?任何建议都非常感谢。

PS对不起,如果“解析”对于我在这里尝试做的事情来说太强了。

4

3 回答 3

2

我认为这里最好的方法是让 MediaWiki 负责解析。我不知道您正在使用的库,但基本上这是

http://en.wikipedia.org/w/api.php?action=query&prop=revisions&titles=Albert%20Einstein&rvprop=content

它返回原始的wikitext和

http://en.wikipedia.org/w/api.php?action=query&prop=revisions&titles=Albert%20Einstein&rvprop=content&rvparse

它返回解析的 HTML。

于 2013-05-28T13:07:56.930 回答
1

您可以使用正则表达式和抓取模块(如 Scrapy 和 Beautifulsoup)来解析和抓取 wiki 页面。现在您已经澄清了您的问题,我建议您使用托管在 github 上的 py-wikimarkup 模块。链接是https://github.com/dcramer/py-wikimarkup/。我希望这会有所帮助。

于 2013-05-28T05:03:03.337 回答
1

我最终这样做了:

def parseWikiTitles(x):
    counter = 1

    while '===' in x:
        if counter == 1:
            x = x.replace('===','<i>',1)
            counter = 2

        else:
            x = x.replace('===',r'</i>',1)
            counter = 1

    counter = 1

    while '==' in x:
        if counter == 1:
            x = x.replace('==','<b>',1)
            counter = 2

        else:
            x = x.replace('==',r'</b>',1)
            counter = 1


    x = x.replace('<b> ', '<b>', 50)
    x = x.replace(r' </b>', r'</b>', 50)
    x = x.replace('<i> ', '<i>', 50)
    x = x.replace(r' </i>', r'<i>', 50)

    return x

我将带有 wiki 标题的文本字符串传递给该函数,它返回相同的文本,其中 == 和 === 替换为粗体和斜体 HTML 标记。最后一件事是删除标题前后的空格,例如== title ==转换为<b>title</b>而不是<b> title </b>

到目前为止工作没有问题。

感谢您的帮助,亚历克斯

于 2013-05-28T21:14:53.800 回答