在joksnet的程序here的帮助下,我设法获得了我正在寻找的纯文本维基百科文章。
返回的文本包含标题的Wiki标记,例如,Albert Einstein article的部分返回如下:
==Biography==
===Early life and education===
blah blah blah
我真正想做的是将检索到的文本提供给一个函数,并将所有顶级部分包含在粗体html标签中,将第二级部分包含在斜体中,如下所示:
<b>Biography</b>
<i>Early life and education</i>
blah blah blah
但是我害怕我不知道如何开始,至少在没有使这个功能变得危险的时候也是如此。我需要使用正则表达式吗? 任何建议都非常感谢。
PS对不起,如果“解析”对于我在这里尝试做的事情来说过于强烈。
答案 0 :(得分:2)
我认为这里最好的方法是让MediaWiki负责解析。我不知道你正在使用的库,但基本上这是
之间的区别返回原始wiki文本和
返回解析的HTML。
答案 1 :(得分:1)
你可以使用像Scrapy和Beautifulsoup这样的正则表达式和抓取模块来解析和抓取维基页面。 既然你澄清了你的问题,我建议你使用github上托管的py-wikimarkup模块。链接是https://github.com/dcramer/py-wikimarkup/。我希望有所帮助。
答案 2 :(得分: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>
到目前为止没有问题。
感谢帮助人员, 亚历