是否可以使用 pywikipedia 只获取页面的文本,而无需任何内部链接或模板以及图片等?
最佳答案
如果您的意思是“我只想获取 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.
# ...
这样你就可以从文章中获得完整的、原始的 wiki 文本。
如果要剥离wiki语法,如将[[Concept inventory]]
转化为Concept inventory等等,会比较痛苦。
造成这种麻烦的主要原因是MediaWiki wiki语法没有定义语法。这使得解析和剥离变得非常困难。我目前不知道有什么软件可以让你准确地做到这一点。当然有 MediaWiki Parser 类,但它是 PHP,有点难以掌握,而且它的目的非常不同。
但是,如果您只想删除链接,或者非常简单的 wiki 构造,请使用正则表达式:
text = re.sub('\[\[([^\]\|]*)\]\]', '\\1', 'Lorem ipsum [[dolor]] sit amet, consectetur adipiscing elit.')
print text #Lorem ipsum dolor sit amet, consectetur adipiscing elit.
然后对于管道链接:
text = re.sub('\[\[(?:[^\]\|]*)\|([^\]\|]*)\]\]', '\\1', 'Lorem ipsum [[dolor|DOLOR]] sit amet, consectetur adipiscing elit.')
print text #Lorem ipsum DOLOR sit amet, consectetur adipiscing elit.
等等。
但是,例如,没有可靠的简单方法可以从页面中删除嵌套模板。评论中有链接的图片也是如此。这非常困难,涉及递归删除最内部的链接并用标记替换它并重新开始。如果需要,请查看 wikipedia.py 中的 templateWithParams
函数,但它并不漂亮。
关于python - 我可以使用 pywikipedia 来获取页面的文本吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1021884/