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

标签 python wiki mediawiki pywikibot

是否可以使用 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/

相关文章:

变量更改时的python信号?

使用 hg/mercurial 克隆存储库时出现 python 错误

ruby-on-rails - 在 Ruby on Rails 中设置相互的 belongs_to

grails - 基于Wiki的网站-技术选择

php - MediaWiki 1.20.0 中如何通过大小写用户名搜索用户贡献?

html - 使用 iframe 从 mediawiki 嵌入编辑页面

python - 复杂拆分应用组合

python - 使用 Apache Webserver 从 Python CGI 文件运行 .bat 文件

perl - 如何使用 Perl 从 LDAP 服务器下载用户列表?

wiki - 在 MediaWiki 中,有没有一种方法可以应用 [[Image :<name>]] style resizing to external images?