Как получить списки Википедии из Python?

Я пытаюсь написать программу, которая получает список песен из данного альбома или саундтрека. Я пытался сделать это с помощью Википедии и нашел 2 модуля, которые должны выполнять эту работу: wikipedia и wikipedia-api. К сожалению, ни один из них не получает элемент статьи, которую я ищу, вместо этого предпочитая просто пропустить его. Это действительно не полезно для меня, очевидно. Итак, что я хочу знать: есть ли модуль, который будет получать списки из статьи в Википедии? Или мне нужно использовать исходные API-интерфейсы Википедии и создать их самостоятельно? Я пытаюсь избежать получения необработанного html и его разбора, потому что это было бы сложно и, вероятно, не нужно.

Вот пример кода, который вы можете попробовать, он использует модуль википедии (pip install wikipedia), но ошибка одинакова для обоих модулей.

import wikipedia
article = wikipedia.search("civil war soundtrack")[0] # I've already checked this, the searching is definitely accurate and isn't the source of the problem
pg = wikipedia.page(article)
print(pg.text)

При печати текста вместо таблицы в разделе "Трек-лист" печатается строка о композиторе и пропускается список целиком.

Заранее спасибо!

Примечание: Если я не отвечаю сразу, это потому, что я сплю, здесь уже поздно, поэтому утром я все проверю.

Примечание 2: Если я делаю что-то не так с точки зрения того, как я задаю вопрос, обратная связь приветствуется! В прошлом меня минусовали за вопросы, и причины продолжают ускользать от меня.


person Bruce Wayne    schedule 13.06.2018    source источник
comment
У меня были эти проблемы с пакетом wikipedia, они по какой-то причине полностью игнорируют ключевые элементы на странице, такие как таблицы. Поэтому я перешел на использование BeautifulSoup для очистки таблиц википедии. Ничего не знаю о wikipedia-api, если проблема тоже в нем   -  person Ofer Sadan    schedule 13.06.2018
comment
См. пример этой проблемы здесь: github.com/goldsmith/Wikipedia/issues/111   -  person Ofer Sadan    schedule 13.06.2018
comment
Да, и это усугубляется тем фактом, что вещь, которую я пытаюсь найти, не совсем таблица, поскольку она не идентифицируется class='wikitable'. Поэтому даже когда я использую что-то, что может находить таблицы, оно не может найти список, который я ищу.   -  person Bruce Wayne    schedule 13.06.2018
comment
Парсинг HTML, вероятно, ваш лучший выбор. Это проще и имеет лучшие инструменты, чем синтаксический анализ таблиц викитекста.   -  person Tgr    schedule 19.06.2018


Ответы (1)


Я пробовал следующие библиотеки, и ни одна из них не поддерживает извлечение таблиц:

  • википедия
  • wikipedia-API
  • MediaWikiAPI

У людей была та же проблема, что и у вас, и один парень предлагает возможное решение вашей проблемы с помощью MediaWikiAPI и Beautiful Soup:

# load page 
mediawikiapi = MediaWikiAPI()
test_page = mediawikiapi.page(PageWithTables)

# scrape the HTML with BeautifulSoup to find tables
soup = BeautifulSoup(test_page.html(), 'html.parser')
tables = soup.findAll("table", { "class" : "wikitable" })

# select target table and apply custom function to export it to pandas
target_table = tables[0]
df_test = wikitable_to_dataframe(target_table)

Источник: https://github.com/goldsmith/Wikipedia/issues/111

person Stanko    schedule 13.06.2018
comment
Итак, я попробовал это и обнаружил некоторую ценную информацию, которая все усложняет: список, который я пытаюсь получить, очевидно, не является викитаблицей. Так что это решение не работает. Я проверил статью, на которую я ссылался в вопросе, я зашел в ту часть, где вы можете редактировать раздел. Там должно быть написано class=wikitable, но это не так. Наверное, поэтому все, что я пробовал, не работает. - person Bruce Wayne; 13.06.2018