例如使用此Wikipedia转储:
是否有现有的Python库,我可以用它来创建一个包含主题和值映射的数组?
例如:
{height_ft,6},{nationality, American}
答案 0 :(得分:11)
看起来你真的希望能够解析MediaWiki标记。为此设计了一个名为mwlib的python库。您可以使用python的内置XML包从API的响应中提取页面内容,然后将该内容传递到mwlib的解析器中以生成对象表示,您可以在代码中浏览和分析以提取所需的信息。 mwlib是BSD许可的。
答案 1 :(得分:6)
答案 2 :(得分:6)
我在mwparserfromhell中使用pywikibot和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对象!
答案 3 :(得分:3)
我知道这个问题很老,但我正在寻找一个解析维基百科xml转储的库。但是,建议的库wikidump和mwlib不提供许多代码文档。然后,我找到了Mediwiki-utilities,其中包含一些代码文档:http://pythonhosted.org/mediawiki-utilities/。
答案 4 :(得分:1)
WikiExtractor似乎是一种干净,简单,高效的方法,可以在Python中实现这一目标:https://github.com/attardi/wikiextractor
它提供了一种将Wikipedia转储解析为简单文件结构的简单方法,如下所示:
<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>
答案 5 :(得分:0)
有关于Python和XML库here的一些信息。
如果您要问的是,是否存在专门用于解析Wiki(pedia)XML并且符合您要求的现有库,这是值得怀疑的。但是,您可以使用其中一个现有库来遍历DOM并提取所需的数据。
另一种选择是编写一个类似的XSLT样式表,并使用lxml调用它。这也允许您从XSLT内部调用Python函数,以便您充分利用这两个世界。
答案 6 :(得分:0)
我知道这是一个老问题,但是我这里是一个很棒的脚本,它读取Wiki转储xml并输出非常好的csv:
PyPI:https://pypi.org/project/wiki-dump-parser/
GitHub:https://github.com/Grasia/wiki-scripts/tree/master/wiki_dump_parser
答案 7 :(得分:-2)
您可能正在寻找操作维基百科API的Pywikipediabot。
答案 8 :(得分:-6)
我想看一下使用Beautiful Soup,然后用HTML获取维基百科页面,而不是使用API。
我会尝试发布一个例子。