解析维基百科转储
回答
看起来你真的想解析MediaWiki标记。有一个为此目的而设计的Python库,名为mwlib。您可以使用python的内置XML包从API响应中提取页面内容,然后将该内容传递到mwlib的解析器中以生成对象表示,您可以在代码中浏览和分析以提取所需的信息。 mwlib是BSD许可的。
我会说看看使用Beautiful Soup,只需在HTML中获取维基百科页面而不是使用API。
我会尝试发布一个例子。
我知道这是一个古老的问题,但对任何绊倒这一切的人来说,绝对不要**这样做。维基百科提供API的全部原因是,他们可以*有效地*返回用户需要的原始数据。通过调用渲染引擎并返回* all *文章内容,刮擦会在服务器上造成完全不必要的压力。 API可以绕过渲染,可以用来拉取用户实际需要的数据子集(例如,只有一个部分)。刮擦应始终作为最后的手段(即,如果网站不提供API)。 – Geoff 2015-09-01 17:57:06
即使HTML能够完美地揭示底层结构,您仍然必须理解模板,消歧页面,重定向等概念。更好地处理源代码时,通过合理的基于语义的标记可以轻松实现。 – tripleee 2017-04-26 05:39:16
你可能正在寻找操作维基百科API的Pywikipediabot。
我描述了如何使用pywikibot和mwparserfromhell的组合在this post(没有足够的声望来标记为重复项)。
In [1]: import mwparserfromhell
In [2]: import pywikibot
In [3]: enwp = pywikibot.Site('en','wikipedia')
In [4]: page = pywikibot.Page(enwp, 'Waking Life')
In [5]: wikitext = page.get()
In [6]: wikicode = mwparserfromhell.parse(wikitext)
In [7]: templates = wikicode.filter_templates()
In [8]: templates?
Type: list
String Form:[u'{{Use mdy dates|date=September 2012}}', u"{{Infobox film\n| name = Waking Life\n| im <...> critic film|waking-life|Waking Life}}', u'{{Richard Linklater}}', u'{{DEFAULTSORT:Waking Life}}']
Length: 31
Docstring:
list() -> new empty list
list(iterable) -> new list initialized from iterable's items
In [10]: templates[:2]
Out[10]:
[u'{{Use mdy dates|date=September 2012}}',
u"{{Infobox film\n| name = Waking Life\n| image = Waking-Life-Poster.jpg\n| image_size = 220px\n| alt =\n| caption = Theatrical release poster\n| director = [[Richard Linklater]]\n| producer = [[Tommy Pallotta]]<br />[[Jonah Smith]]<br />Anne Walker-McBay<br />Palmer West\n| writer = Richard Linklater\n| starring = [[Wiley Wiggins]]\n| music = Glover Gill\n| cinematography = Richard Linklater<br />[[Tommy Pallotta]]\n| editing = Sandra Adair\n| studio = [[Thousand Words]]\n| distributor = [[Fox Searchlight Pictures]]\n| released = {{Film date|2001|01|23|[[Sundance Film Festival|Sundance]]|2001|10|19|United States}}\n| runtime = 101 minutes<!--Theatrical runtime: 100:40--><ref>{{cite web |title=''WAKING LIFE'' (15) |url=http://www.bbfc.co.uk/releases/waking-life-2002-3|work=[[British Board of Film Classification]]|date=September 19, 2001|accessdate=May 6, 2013}}</ref>\n| country = United States\n| language = English\n| budget =\n| gross = $3,176,880<ref>{{cite web|title=''Waking Life'' (2001)|work=[[Box Office Mojo]] |url=http://www.boxofficemojo.com/movies/?id=wakinglife.htm|accessdate=March 20, 2010}}</ref>\n}}"]
In [11]: infobox_film = templates[1]
In [12]: for param in infobox_film.params:
print param.name, param.value
name Waking Life
image Waking-Life-Poster.jpg
image_size 220px
alt
caption Theatrical release poster
director [[Richard Linklater]]
producer [[Tommy Pallotta]]<br />[[Jonah Smith]]<br />Anne Walker-McBay<br />Palmer West
writer Richard Linklater
starring [[Wiley Wiggins]]
music Glover Gill
cinematography Richard Linklater<br />[[Tommy Pallotta]]
editing Sandra Adair
studio [[Thousand Words]]
distributor [[Fox Searchlight Pictures]]
released {{Film date|2001|01|23|[[Sundance Film Festival|Sundance]]|2001|10|19|United States}}
runtime 101 minutes<!--Theatrical runtime: 100:40--><ref>{{cite web |title=''WAKING LIFE'' (15) |url=http://www.bbfc.co.uk/releases/waking-life-2002-3|work=[[British Board of Film Classification]]|date=September 19, 2001|accessdate=May 6, 2013}}</ref>
country United States
language English
budget
gross $3,176,880<ref>{{cite web|title=''Waking Life'' (2001)|work=[[Box Office Mojo]] |url=http://www.boxofficemojo.com/movies/?id=wakinglife.htm|accessdate=March 20, 2010}}</ref>
不要忘了params也是mwparserfromhell对象!
我知道这个问题是旧的,但我正在寻找一个解析维基百科xml转储的库。但是,建议的库wikidump和mwlib不提供许多代码文档。然后,我发现Mediwiki-utilities,其中有一些代码文档:http://pythonhosted.org/mediawiki-utilities/。
很酷的项目,但只适用于python 3 – GrantD71 2015-03-15 06:07:17
WikiExtractor似乎是一个清洁,简单,高效的方式做到今天这样在Python:https://github.com/attardi/wikiextractor
它提供了一种简单的方法来分析维基百科转储到一个简单的文件结构如下所示:
<doc>...</doc>
<doc>...</doc>
...
<doc>...</doc>
...每个文档的样子:
<doc id="2" url="http://it.wikipedia.org/wiki/Harmonium">
Harmonium.
L'harmonium è uno strumento musicale azionato con una tastiera, detta manuale.
Sono stati costruiti anche alcuni harmonium con due manuali.
...
</doc>
- 1. 解析XML维基百科
- 2. 解析维基百科类
- 3. 维基百科解析器
- 4. 解析维基百科转储(.xml文件)
- 5. 如何解析维基百科转储以创建链接图?
- 6. 解析Groovy中的维基百科xml转储
- 7. 解析维基百科Pagelink数据集
- 8. 解析维基百科XML和Java
- 9. 解析维基百科页表问题
- 10. 解析维基百科介绍PHP
- 11. 解析出维基百科的IPAc
- 12. 刮和解析维基百科页面
- 13. python3解析和维基百科页面
- 14. 多数据转储维基百科
- 15. Lucene的维基百科转储
- 16. 使用大* .bz2(维基百科转储)
- 17. 维基百科转储文件
- 18. 导入维基百科转储到MySql
- 19. 处理维基百科转储文件
- 20. 了解维基百科标题转储格式
- 21. 将维基百科转储解析为保存结构(部分)的纯文本
- 22. 维基百科API
- 23. 从维基百科获取维基百科主题标题
- 24. 使用python转换维基百科转储为文本-m gensim.scripts.make_wiki
- 25. 解析维基百科的出生和死亡日期?
- 26. 维基百科使用哪一个wiki标记解析器?
- 27. 从目录中的文件解析出维基百科标记
- 28. 如何解析所有维基百科的网页?
- 29. 如何解析Python中的维基百科页面?
- 30. 解析维基百科递归和包括链接
thx寻求帮助。 我在你给我的链接中尝试了mwlib教程 但是我不确定如何操作由simpleparse返回的Article对象。 例如,我将如何使用适当的标题将所有数据重建为xml格式? – tomwu 2010-08-12 04:38:45
任何实际的工具现在工作? – 2016-03-30 19:08:38
@quantCode我近年来并没有诚实地看待这些工具的状态,但是[项目的Github回购](https://github.com/pediapress/mwlib)的快速检查表明,mwlib仍然有规律,如果不经常更新。如果你打算在这个领域做点什么,这可能还是值得一看的。 – chaos95 2016-05-03 01:11:35