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

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

Вот пример кода, который вы можете попробовать, он использует модуль wikipedia (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: если я что-то делаю не так, как задаю вопрос, обратная связь приветствуется! Раньше мне отказывали в голосах за вопросы, и причины продолжают ускользать от меня.

У меня были эти проблемы с пакетом wikipedia, они почему-то полностью игнорируют ключевые элементы на странице, такие как таблицы. Итак, я переключился на использование BeautifulSoup для очистки таблицы википедии. Ничего не знаю о wikipedia-api, если проблема тоже есть

Ofer Sadan 13.06.2018 09:21

См. Пример этой проблемы здесь: github.com/goldsmith/Wikipedia/issues/111

Ofer Sadan 13.06.2018 09:25

Да, и это усугубляется тем фактом, что то, что я пытаюсь найти, - это не совсем таблица, поскольку она не определяется классом = 'wikitable'. Поэтому даже когда я использую что-то, что может найти таблицы, оно не может найти список, который я ищу.

Bruce Wayne 13.06.2018 19:28

Разбор HTML, вероятно, ваш лучший выбор. Это проще и имеет лучший инструментарий, чем парсинг таблиц вики-текста.

Tgr 19.06.2018 12:01
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
4
1 038
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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

Хорошо, я попробовал это и нашел некоторую ценную информацию, которая делает все намного сложнее: список, который я пытаюсь получить, очевидно, не является вики-сайтом. Так что это решение не работает. Я проверил статью, на которую ссылался в вопросе, я перешел в ту часть, где вы можете редактировать раздел. Там должно быть написано class = "wikitable", но это не так. Наверное, поэтому все, что я пробовал, не работает.

Bruce Wayne 13.06.2018 19:11

Другие вопросы по теме