我可以使用pywikipedia来获取页面的文本吗?

2024-09-28 18:55:50 发布

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

使用pywikipedia,是否可以只获取页面的文本,而不需要任何内部链接或模板,也不需要图片等。?在


Tags: 文本模板链接图片页面pywikipedia
2条回答

有一个名为mwparserfromhell on Github的模块,根据您的需要,它可以让您非常接近您想要的东西。它有一个名为strip_code()的方法,可以去除很多标记。在

import pywikibot
import mwparserfromhell

test_wikipedia = pywikibot.Site('en', 'test')
text = pywikibot.Page(test_wikipedia, 'Lestat_de_Lioncourt').get()

full = mwparserfromhell.parse(text)
stripped = full.strip_code()

print full
print '*******************'
print stripped

比较代码段:

^{pr2}$

如果您的意思是“我只想获取wikitext”,那么看看wikipedia.Page类和get方法。在

import wikipedia

site = wikipedia.getSite('en', 'wikipedia')
page = wikipedia.Page(site, 'Test')

print page.get() # '''Test''', '''TEST''' or '''Tester''' may refer to:
#==Science and technology==
#* [[Concept inventory]] - an assessment to reveal student thinking on a topic.
# ...

这样您就可以从文章中获得完整的原始wikitext。在

如果您想去掉wiki语法,比如将[[Concept inventory]]转换为概念清单等等,那么这将更加痛苦。在

这个问题的主要原因是mediawikiki语法没有定义语法。这使得它很难解析和剥离。我目前还不知道有什么软件可以让你准确地做到这一点。当然还有MediaWiki解析器类,但是它是PHP,有点难以理解,而且它的用途也非常不同。在

但如果您只想去掉链接或非常简单的wiki构造,请使用regex:

^{pr2}$

然后对于管道连接:

text = re.sub('\[\[(?:[^\]\|]*)\|([^\]\|]*)\]\]', '\\1', 'Lorem ipsum [[dolor|DOLOR]] sit amet, consectetur adipiscing elit.')
print text #Lorem ipsum DOLOR sit amet, consectetur adipiscing elit.

等等。在

但例如,没有可靠的简单方法从页面中剥离嵌套模板。在评论中有链接的图片也是如此。这非常困难,需要递归地删除最内部的链接,并用标记替换它,然后重新开始。看看中的templateWithParams函数维基百科.py如果你想的话,但这并不漂亮。在

相关问题 更多 >