11

Например, используя эту Википедию дамп:разбор Википедия свалки

http://en.wikipedia.org/w/api.php?action=query&prop=revisions&titles=lebron%20james&rvprop=content&redirects=true&format=xmlfm

Есть ли существующие библиотеки для Python, что я могу использовать, чтобы создать массив с отображением предметов и ценностей?

Например:

{height_ft,6},{nationality, American} 

ответ

10

Похоже, вы действительно хотите разобрать разметку MediaWiki. Для этой цели создана библиотека python под названием mwlib. Вы можете использовать встроенные пакеты XML python для извлечения содержимого страницы из ответа API, а затем передать этот контент в парсер mwlib для создания представления объекта, которое вы можете просматривать и анализировать в коде, чтобы извлечь нужную вам информацию. mwlib лицензирован BSD.

+1

thx для помощи. Я попробовал учебник mwlib по ссылке, которую вы мне дали Однако я не уверен, как мне манипулировать с объектом Article, который возвращается с помощью simpleparse. Например, как бы я перестроил все данные в формате xml с соответствующими заголовками? – tomwu

+0

Любой действующий инструмент теперь работает? – 2016-03-30 19:08:38

+0

@quantCode Я не честно смотрел на состояние этих инструментов в последние годы, но быстрая проверка [репортаж Github проекта] (https://github.com/pediapress/mwlib) показывает, что mwlib все еще регулярно, если нечасто, обновления. Это, вероятно, стоит посмотреть, если вы планируете что-то делать в этом пространстве. – chaos95

0

Там какая-то информация о Python и XML-библиотеки here.

Если вы спрашиваете, существует ли существующая библиотека, предназначенная для синтаксического анализа Wiki (pedia) XML и соответствия вашим требованиям, это сомнительно. Однако вы можете использовать одну из существующих библиотек для пересечения DOM и вытащить нужные вам данные.

Другой вариант - написать таблицу стилей XSLT, которая аналогична, и называть ее с помощью lxml. Это также позволяет вам делать вызовы функций Python внутри XSLT, чтобы вы могли получить лучшее из обоих миров.

+0

Sheesh, почему downvote. Если ваш ответ лучше, пусть он будет стоять за себя - мой не был ошибочным. – imoatama

-5

Я бы сказал, используя Beautiful Soup и просто получив страницу Википедии в HTML вместо использования API.

Я попробую и отправлю пример.

+0

Я знаю, что это старый вопрос, но всем, кто наткнулся на это, абсолютно не делает ** НЕ ** делает это. Вся причина, по которой Wikipedia предлагает API, заключается в том, что они могут * эффективно * возвращать необработанные данные пользователям. Скребок вызывает совершенно ненужное усилие на серверах, вызывая механизмы рендеринга и возвращая * все * содержимое статьи. API обходит рендеринг и может использоваться для вытягивания только подмножества данных, которые действительно нужны пользователю (например, только один раздел). Скребок всегда должен использоваться в качестве последнего средства (то есть, если сайт не предлагает API). – Geoff

+0

И даже если HTML полностью раскрывает базовую структуру, вам все равно придется понимать концепцию шаблонов, страниц значений, переадресаций и т. Д. Лучше обрабатывать источник, где это на виду, с разумно семантической разметкой. – tripleee

5

Просто наткнулся на библиотеку на PyPi, wikidump, который утверждает, что обеспечить

Инструменты для обработки и извлечения данных из Википедии свалки

Я не использовал его еще, так что вы самостоятельно, чтобы попробовать ...

3

Я описал, как это сделать, используя комбинацию 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> 

Не забывайте, что параметры тоже являются объектами mwparserfromhell!

1

Я знаю, что вопрос старый, но я искал библиотеку, которая анализирует wikipedia xml dump. Однако предлагаемые библиотеки wikidump и mwlib не предлагают много документации по коду. Затем я нашел Mediwiki-utilities, который имеет некоторую документацию кода в: http://pythonhosted.org/mediawiki-utilities/.

+0

Прохладный проект, но работает только с python 3 – GrantD71

0

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> 
Смежные вопросы