Я пытаюсь написать программу, которая получает список песен из определенного альбома или саундтрека. Я пытался сделать это с помощью Википедии и нашел 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: если я что-то делаю не так, как задаю вопрос, обратная связь приветствуется! Раньше мне отказывали в голосах за вопросы, и причины продолжают ускользать от меня.
См. Пример этой проблемы здесь: github.com/goldsmith/Wikipedia/issues/111
Да, и это усугубляется тем фактом, что то, что я пытаюсь найти, - это не совсем таблица, поскольку она не определяется классом = 'wikitable'. Поэтому даже когда я использую что-то, что может найти таблицы, оно не может найти список, который я ищу.
Разбор HTML, вероятно, ваш лучший выбор. Это проще и имеет лучший инструментарий, чем парсинг таблиц вики-текста.






Я пробовал следующие библиотеки, и ни одна из них не поддерживает извлечение таблиц:
У людей была такая же проблема, как и у вас, и один парень предлагает возможное решение вашей проблемы с помощью 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", но это не так. Наверное, поэтому все, что я пробовал, не работает.
У меня были эти проблемы с пакетом
wikipedia, они почему-то полностью игнорируют ключевые элементы на странице, такие как таблицы. Итак, я переключился на использованиеBeautifulSoupдля очистки таблицы википедии. Ничего не знаю оwikipedia-api, если проблема тоже есть