用python制作wiki解析器(希望很简单)

2024-09-27 00:18:24 发布

您现在位置:Python中文网/ 问答频道 /正文

在joksnet的程序here的帮助下,我已经设法得到了我正在寻找的纯文本维基百科文章。在

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

==Biography==

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

我真正想做的是将检索到的文本输入到一个函数中,并将所有顶层部分用粗体html标记括起来,第二级部分用斜体表示,如下所示:

^{pr2}$

但恐怕我甚至不知道如何开始,至少不能不让函数变得过于天真。我需要使用正则表达式吗? 如有任何建议,不胜感激。在

抱歉,如果“解析”是一个太强的词,我在这里试图做的。在


Tags: 函数标记文本程序标题herewikiarticle
3条回答

我认为最好的方法是让MediaWiki负责解析。我不知道你用的库,但基本上这就是

{a1}

它返回原始wikitext和

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

返回已解析的HTML。在

您可以使用regex和scraping模块,如Scrapy和Beautifulsoup来解析和抓取wiki页面。 既然您已经澄清了您的问题,我建议您使用github上托管的py wikimarkup模块。链接是https://github.com/dcramer/py-wikimarkup/。我希望这有帮助。在

最后我做了这个:

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 ==被转换成{},而不是{}

到目前为止工作顺利。在

谢谢你们的帮助, 亚历克斯

相关问题 更多 >

    热门问题