2014-10-20 2 views
1

Я пытаюсь извлечь содержимое infobox с помощью пакета python wikipedia.Как извлечь инфобокс vcard из википедии с помощью библиотеки википедии python

Мой код выглядит следующим образом (для this page):

import wikipedia 
Aldi = wikipedia.page('Aldi') 

Когда я вхожу:

Aldi.content 

Я получаю текст статьи, но не Википедия.

Я попытался получить данные из DBPedia, но не повезло. . Я также попытался извлекая страницу с BeautifulSoup4, но таблица странно структурирована (так как изображение охватывающего через оба колонок с последующих безымянными столбцами

Это, насколько я пошел с BeautifulSoup:

from bs4 import BeautifulSoup 
import urllib2 
site= "http://en.wikipedia.org/wiki/Aldi" 
hdr = {'User-Agent': 'Mozilla/5.0'} 
req = urllib2.Request(site,headers=hdr) 
page = urllib2.urlopen(req) 
soup = BeautifulSoup(page) 
print soup 

Я также посмотрел в викиданном, но он не содержит большую часть информации, которую мне нужно из таблицы.

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

Предпочтительно, я хотел бы иметь словарь со значениями Infobox:

Type  Private 
Industry Retail 

и т.д ...

+0

Возможный дубликат [Содержание Infobox Википедии] (http://stackoverflow.com/questions/8088226/content-of-infobox-of-wikipedia) – Nemo

ответ

1

решение, основанное на BeautifulSoup:

from bs4 import BeautifulSoup 
import urllib2 
site= "http://en.wikipedia.org/wiki/Aldi" 
hdr = {'User-Agent': 'Mozilla/5.0'} 
req = urllib2.Request(site,headers=hdr) 
page = urllib2.urlopen(req) 
soup = BeautifulSoup(page.read()) 
table = soup.find('table', class_='infobox vcard') 
result = {} 
exceptional_row_count = 0 
for tr in table.find_all('tr'): 
    if tr.find('th'): 
     result[tr.find('th').text] = tr.find('td').text 
    else: 
     # the first row Logos fall here 
     exceptional_row_count += 1 
if exceptional_row_count > 1: 
    print 'WARNING ExceptionalRow>1: ', table 
print result 

Испытано на http://en.wikipedia.org/wiki/Aldi, но не полностью протестированы на других страницах вики.

-1

Мое решение

from bs4 import BeautifulSoup as bs 
query = 'albert einstien' 
url = 'https://en.wikipedia.org/wiki/'+query 
def infobox() : 
raw = urllib.urlopen(url) 
soup = bs(raw) 
table = soup.find('table',{'class':'infobox vcard'}) 
for tr in table.find_all('tr') : 
    print tr.text 

 Смежные вопросы

  • Нет связанных вопросов^_^