Самообучаемый чат-бот python, который умеет искать ответы в Wikipedia / Хабр
Всем привет!
Давно хотел сделать своего собственного Jarvis. Недавно удалась свободная минутка и я его сделал. Он умеет переписываться с Вами, а также искать ответы на Ваши вопросы в Wikipedia. Для его реализации я использовал язык Python.
Для начала установим все необходимые библиотеки. Их три: pyTelegramBotAPI, scikit-learn, а также Wikipedia. Устанавливаются они просто:
pip install pyTelegramBotAPI
pip install Wikipedia
pip install scikit-learn
После установки всех библиотек приступаем к разработке. Для начала импортируем все библиотеки, установим язык для Википедии и подключим телеграмм бота
import telebot, wikipedia, re from sklearn.feature_extraction.text import CountVectorizer from sklearn.linear_model import LogisticRegression wikipedia.set_lang("ru") bot = telebot.TeleBot('Ваш ключ, полученный от BotFather')
Теперь напишем код, для очистки всех ненужных нам знаков, которые вводит пользователь:
def clean_str(r): r = r. lower() r = [c for c in r if c in alphabet] return ''.join(r) alphabet = ' 1234567890-йцукенгшщзхъфывапролджэячсмитьбюёqwertyuiopasdfghjklzxcvbnm?%.,()!:;'
Также Вам необходимо создать в папке, где находится Ваш код файл dialogues.txt, в нем мы будем создавать реплики на которые должен отвечать бот. Вот пример данного файла:
привет\здравствуйте! как дела\хорошо. кто ты\я Джарвис.
Строка до знака \ означает вопрос пользователя, а после ответ нашего бота. После чего напишем такой код в наш файл с ботом:
def update(): with open('dialogues.txt', encoding='utf-8') as f: content = f.read() blocks = content.split('\n') dataset = [] for block in blocks: replicas = block.split('\\')[:2] if len(replicas) == 2: pair = [clean_str(replicas[0]), clean_str(replicas[1])] if pair[0] and pair[1]: dataset.append(pair) X_text = [] y = [] for question, answer in dataset[:10000]: X_text.append(question) y += [answer] global vectorizer vectorizer = CountVectorizer() X = vectorizer. fit_transform(X_text) global clf clf = LogisticRegression() clf.fit(X, y) update()
Этот кусок кода читает файл dialogues.txt, потом превращает реплики в так называемые вектора, с помощью которых наш бот будет искать наиболее подходящий ответ к заданному нами вопросу. Например, если Вы написали в файле dialogues.txt вопрос «Ты знаешь Аню», а ответ на него «Да, конечно», то бот будет отвечать также и на похожие вопросы, например «Ты знаешь Васю».
Теперь напишем кусок кода, который будет генерировать ответы на основе векторов:
def get_generative_replica(text): text_vector = vectorizer.transform([text]).toarray()[0] question = clf.predict([text_vector])[0] return question
Этот кусок кода принимает вопрос от пользователя и возвращает ответ от бота.
Теперь напишем функцию для поиска информации в Википедии:
def getwiki(s): try: ny = wikipedia.page(s) wikitext=ny.content[:1000] wikimas=wikitext.split('.') wikimas = wikimas[:-1] wikitext2 = '' for x in wikimas: if not('==' in x): if(len((x. \{\}]*\}', '', wikitext2) return wikitext2 except Exception as e: return 'В Википедии нет информации об этом'
Этот кусок кода получает вопрос пользователя, потом ищет ответ на него в Википедии и если ответ найден, то отдает его пользователю, а если ответ не найден, то пишет, что «В Википедии нет информации об этом».
Теперь пишем последний кусок кода:
@bot.message_handler(commands=['start']) def start_message(message): bot.send_message(message.chat.id,"Здравствуйте, Сэр.") question = "" @bot.message_handler(content_types=['text']) def get_text_messages(message): command = message.text.lower() if command =="не так": bot.send_message(message.from_user.id, "а как?") bot.register_next_step_handler(message, wrong) else: global question question = command reply = get_generative_replica(command) if reply=="вики ": bot.send_message(message.from_user.id, getwiki(command)) else: bot.send_message(message.from_user.id, reply) def wrong(message): a = f"{question}\{message. text.lower()} \n" with open('dialogues.txt', "a", encoding='utf-8') as f: f.write(a) bot.send_message(message.from_user.id, "Готово") update()
В этом куске кода телеграмм бот при получении сообщения от пользователя отвечает на него и если ответ не верный, то пользователь пишет «не так». Если бот получает сообщение «не так», то он берет последний вопрос пользователя и спрашивает «а как?», после чего пользователь должен отправить ему правильный ответ. После этого бот обновляет свою базу данных вопросов и ответов и при следующих вопросах пользователя отвечает на них правильно. И если ответ на вопрос бот должен был взять из Википедии, то пользователь в ответ на вопрос «а как?», должен написать «wiki». Осталось в конце приписать строчку:
bot.polling(none_stop=True)
И можно запускать и тестировать бота.
Весь код файла с ботом прилагаю ниже:
import telebot, wikipedia, re from sklearn.feature_extraction.text import CountVectorizer from sklearn.linear_model import LogisticRegression bot = telebot. TeleBot('Ваш ключ от BotFather') wikipedia.set_lang("ru") def clean_str(r): r = r.lower() r = [c for c in r if c in alphabet] return ''.join(r) alphabet = ' 1234567890-йцукенгшщзхъфывапролджэячсмитьбюёqwertyuiopasdfghjklzxcvbnm?%.,()!:;' def update(): with open('dialogues.txt', encoding='utf-8') as f: content = f.read() blocks = content.split('\n') dataset = [] for block in blocks: replicas = block.split('\\')[:2] if len(replicas) == 2: pair = [clean_str(replicas[0]), clean_str(replicas[1])] if pair[0] and pair[1]: dataset.append(pair) X_text = [] y = [] for question, answer in dataset[:10000]: X_text.append(question) y += [answer] global vectorizer vectorizer = CountVectorizer() X = vectorizer.fit_transform(X_text) global clf clf = LogisticRegression() clf.fit(X, y) update() def get_generative_replica(text): text_vector = vectorizer.transform([text]).toarray()[0] question = clf.predict([text_vector])[0] return question def getwiki(s): try: ny = wikipedia. \{\}]*\}', '', wikitext2) return wikitext2 except Exception as e: return 'В энциклопедии нет информации об этом' @bot.message_handler(commands=['start']) def start_message(message): bot.send_message(message.chat.id,"Здравствуйте, Сэр.") question = "" @bot.message_handler(content_types=['text']) def get_text_messages(message): command = message.text.lower() if command =="не так": bot.send_message(message.from_user.id, "а как?") bot.register_next_step_handler(message, wrong) else: global question question = command reply = get_generative_replica(command) if reply=="вики ": bot.send_message(message.from_user.id, getwiki(command)) else: bot.send_message(message.from_user.id, reply) def wrong(message): a = f"{question}\{message.text.lower()} \n" with open('dialogues.txt', "a", encoding='utf-8') as f: f.write(a) bot.send_message(message.from_user.id, "Готово") update() bot.polling(none_stop=True)
Надеюсь, статья Вам понравилась 🙂
Питон | это.
.. Что такое Питон?ТолкованиеПеревод
- Питон
?
ПитоныPython regius
Научная классификация Царство: Животные Тип: Хордовые Подтип: Позвоночные Класс: Пресмыкающиеся Отряд: Чешуйчатые Подотряд: Змеи Семейство: Ложноногие Подсемейство: Питоны Латинское название Pythoninae Fitzinger, 1826 Роды - Черноголовые питоны (Aspidites)
- Карликовые австралийские питоны (Antaresia)
- Папуанские питоны (Apodora)
- Кольчатые питоны (Bothrochilus)
- Белогубые питоны (Leiopython)
- Водяные питоны (Liasis)
- Ромбические питоны (Morelia)
- Настоящие питоны (Python)
Систематика
на Викивидах
Изображения
на ВикискладеITIS 563893 Пито́ны (лат.
Pythoninae) — подсемейство ложноногих змей, иногда выделяемое в отдельное семейство Pythonidae. В более узком смысле питоны — представители рода Python.Распространены в Восточном и частично в Западном (Центральная Америка) полушариях. У многих видов сохранились хорошо заметные рудименты задних конечностей. Размеры питонов от 0,5 до 10 метров (сетчатый питон). Отличительным свойством питонов является способность насиживать кладку яиц, причем за счет сокращения мышц тела температура кладки на 12—15° С выше температуры окружающей среды. Еще одним классификационным признаком достоверно отличающим питона от удава является наличие рудиментарной кости в члене питонов. Наличие этой кости затрудняет сокрытие полового члена в полости тела, в результате чего у питона между рудиментами задних конечностей часто просматривается неполностью убранный половой член.
Окраска от более или менее одноцветной (бурого или буро-коричневого тонов) до довольно пёстрой — пятнистой.
В неволе живут до 25 лет. Мясо некоторых питонов съедобно, кожа многих видов используется для различных изделий. [1]Литература
- Наумов Н.П., Карташев Н.Н. Часть 2. Пресмыкающиеся, птицы, млекопитающие // Зоология позвоночных. — М.: Высшая школа, 1979. — С. 272.
Примечания
- ↑ Большая советская энциклопедия, 3 изд., И. С. Даревский.
Wikimedia Foundation. 2010.
Поможем написать реферат
Синонимы:
змея, удав
- Питомник
- Питон (змея)
Полезное
PythonImplementations — Python Wiki
Содержание
- Реализации Python
- Варианты CPython
- Сокращенные варианты Python
- Другие реализации
- Рабочие реализации
- Предварительные реализации
- Расширения
- Компиляторы
- Числовые ускорители
- Похожие, но разные языки
- Руководства по темам
- (Весело) Препроцессоры Python
- Academic Projects
- Варианты CPython
Под «реализацией» Python следует понимать программу или среду, которая обеспечивает поддержку выполнения программ, написанных на языке Python, представленном эталонной реализацией CPython.
Было и есть несколько отдельных программных пакетов, предоставляющих то, что мы все называем Python, хотя некоторые из них больше похожи на дистрибутивы или варианты какой-то существующей реализации, чем на совершенно новую реализацию языка.
Варианты CPython
Это реализации, основанные на ядре среды выполнения CPython (де-факто эталонная реализация Python), но с расширенным поведением или функциями в некоторых аспектах.
CrossTwine Linker — комбинация CPython и дополнительной библиотеки, обеспечивающая повышенную производительность (в настоящее время проприетарная)
Stackless Python — CPython с упором на параллелизм с использованием тасклетов и каналов (используется dspython для Nintendo DS)
Pyston — форк CPython, первоначально разработанный в Dropbox, но теперь независимыми разработчиками, ориентированный на производительность, включая ускорение байт-кода и упрощенный JIT.
Cinder, форк CPython от Instagram, содержащий ряд оптимизаций, таких как переписывание байт-кода и JIT-компилятор метода за раз.
Pyjion, расширение JIT для CPython, которое компилирует код Python в CIL (.NET) и выполняет его в среде CLR.
unladen-swallow — «ветвь оптимизации CPython, предназначенная для полной совместимости и значительного ускорения», изначально рассматривалась для слияния с CPython в соответствии с PEP 3146, но теперь не поддерживается
wpython — повторная реализация CPython использование «кода слова» вместо байт-кода
eGenix PyRun — среда выполнения Python (CPython + стандартная библиотека), сжатая в один двоичный файл размером 3–4 МБ
x-python — интерпретатор C Python, написанный на Python; полезно в образовательных целях. Для него также есть отладчик байт-кода
Falcon — регистровая машина Python, поставляемая как модуль расширения
Сокращенные варианты Python
Предоставляют подмножество полного языка + стандартной библиотеки для использования во встроенных сценариях (см. также раздел EmbeddedPython)
Также просмотрите разделы о компиляторах и расширениях Python ниже, некоторые из которых можно квалифицировать как варианты CPython.
Другие реализации
Это повторные реализации языка Python, которые не зависят (или обязательно взаимодействуют) с ядром среды выполнения CPython. Многие из них повторно используют (большую часть) реализацию стандартной библиотеки.
Обратите внимание, что большинство этих проектов еще не достигли языкового соответствия. Однако у многих из них есть цели и функции или они работают в определенных средах, которые делают их интересными сами по себе. Единственными известными реализациями, совместимыми с данной версией языка, являются IronPython, Jython и PyPy.
Рабочие реализации
Следующие реализации могут быть неполными или даже неполными, но, по крайней мере, можно сказать, что они работают, поскольку с ними уже можно запускать типичные программы:
PyPy — Python на Python, включает отслеживающий JIT-компилятор
Jython — Python на Java для платформы Java IronPython Community Edition (IPCE) проекта FePy. GC, скрытые классы и шаблон JIT.
Brython — способ запуска Python в браузере через трансляцию в JavaScript
CLPython — Python в Common Lisp информация о типах, собранная во время выполнения
pyjs — (формально Pyjamas) компилятор Python для JavaScript плюс платформа Web/GUI
PyMite — Python для встраиваемых устройств
pyvm — виртуальная машина, связанная с Python, и программный пакет, предоставляющий почти автономную систему «пользовательского пространства» язык Python, оптимизированный для использования во встроенных устройствах с низким энергопотреблением» (очевидно, проприетарный)
tinypy — минималистская реализация Python в 64K кода
Transcrypt — Прекомпилятор Python 3.6 в JavaScript с компактным и быстро сгенерированным кодом, исходными картами, встроенной минимификацией, опциональной статической проверкой типов, поддержкой JSX они могут не запускать типичные программы:
Berp — реализация Python 3 на Haskell, предоставляющая интерактивную среду, а также компилятор
phpython — интерпретатор Python, написанный на PHP
Pyjaco — компилятор Python в JavaScript, похожий на Pyjs, но более легкий
Pystacho, как и Skulpt, Python в JavaScript . org/web/20041206021225if_/http://www.twistedmatrix.com/users/z3p/files/pyvm2.py — интерпретатор байт-кода CPython 2, написанный на Python 2, заброшенный, упомянутый в списке рассылки PyPy в 2003 г.
Skulpt — Python в JavaScript
Typhon — реализация Python на основе Rubinius
Violet — реализация Python Swift
Компиляторы
Эти компиляторы обычно реализуют что-то близкое к Python, хотя некоторые компиляторы могут накладывать ограничения, изменяющие природу языка:
Cython — широко используемый оптимизирующий компилятор Python-to-C, генератор модулей расширения CPython и язык-оболочка для связывания внешних библиотек. Взаимодействует со средой выполнения CPython и поддерживает встраивание CPython в автономные двоичные файлы.
Nuitka — компилятор Python-C++, использующий libpython во время выполнения и пытающийся оптимизировать время компиляции и время выполнения. Взаимодействует со средой выполнения CPython.
MyPyC компилирует полностью типизированный код Python в расширение C на основе mypy.
2c-python — статический компилятор Python-to-C, очевидно переводящий байт-код CPython в C Front-End — незавершенная работа по компиляции кода Python в инфраструктуре GCC
Pyc — выполняет статический анализ для компиляции программ Python, использует методы, аналогичные Shed Skin
Shed Skin — компилятор Python-C++, ограниченный неявно статически типизированным подмножеством языка, для которого он может автоматически выводить эффективные типы посредством анализа всей программы
unPython — компилятор Python-C с использованием аннотаций типов
VOC — Транспилятор, который преобразует байт-код Python в байт-код Java.
Числовые ускорители
Numba — оптимизирующий компилятор среды выполнения с поддержкой NumPy для Python
Pythran — опережающий компилятор для подмножества Python с упором на научные вычисления
Copperhead — чисто функциональный Python с параллельными данными, компилируется в многоядерные и графические серверные части
Parakeet — компилятор времени выполнения для числового подмножества Python
Похожие, но разные языки
Эти языки не пытаются быть напрямую совместимыми даже с подмножеством Python, предоставляя свой собственный набор функций:
Alore — компилируемый язык с опциональной типизацией и синтаксисом, вдохновленным Python/Ruby; планируется построить мост Алоре-Питон; разработка была перенесена на mypy (см. ниже)
Cobra
Converge — вдохновлен Python, Haskell, Icon и Smalltalk, предоставляет макросы, которые можно оценить во время компиляции
Delight — на основе язык программирования D
Genie — основан на тех же основах (Gtk+, GNOME), что и язык программирования Vala, предположительно вдохновленный Boo
mypy — Python с опциональной статической типизацией и некоторым локальным выводом типов , C++ и JS, включает параметризованные типы, макросы и т. д.
Pythonect — язык, ориентированный на поток данных, использующий базовый синтаксис выражений Python, реализованный в Python и интегрированный со средой Python
Защищенный язык Roket — интерпретатор Python-подобного языка для приложений, где требуется «ограниченное выполнение Python». подробнее)
Serpentine — язык с Python-подобным синтаксисом для виртуальной машины Dalvik
Wirbel — компилируемый язык с ограничениями, аналогичными Shed Skin (статически типизированные имена, списки не могут смешивать элементы разных типов), больше не разрабатывается активно по состоянию на 21 июля 2011 г.
Сравнения:
Сравнения Genie и Wirbel и Genie и Python, проведенные ведущим разработчиком дистрибутива Puppy Linux Руководства по темам
EmbeddedPython
Дистрибутивы Python
(Веселье) Препроцессоры Python
Есть даже несколько ироничных диалектов Python, которые могут показаться вам забавными.
Like, Python
LOLPython
Academic Projects
Реализации и компиляторы Python были темой различных статей и диссертаций. Те, которые, по-видимому, не получили дальнейшей разработки, перечислены здесь:
QGen: транслятор Python в Qt/C++ — простой транслятор, описанный в магистерской диссертации 2004 г.
Starkiller — транслятор Python в C++, с обзором современных инструментов, в магистерской диссертации 2004 г. (авторский сайт)
Эта страница призвана заменить страницу, ранее существовавшую как «Личные заметки Кэмерона Лэрда о вариантах реализации Python». Также представляет интерес IntegratingPythonWithOtherLanguages, в котором среди прочих вариантов упоминается встраиваний Python в другие языки.
CategoryImplementations
Wikipedia API — Wikipedia Python API 0.5.3 документация
Wikipedia-API
— простая в использовании оболочка Python для API Википедии. Он поддерживает извлечение текстов, разделов, ссылок, категорий, переводов и т. д. из Википедии. Документация содержит фрагменты кода для наиболее распространенных вариантов использования.Установка
Для установки этого пакета требуется как минимум Python 3.4, поскольку он использует IntEnum.
pip3 установить wikipedia-api
Использование
Целью
Wikipedia-API
является предоставление простого и удобного в использовании API для получения информации из Википедии. Ниже приведены примеры распространенных вариантов использования.Импорт
импорт wikipediaapi
Как получить одну страницу
Получить одну страницу очень просто. Вы должны инициализировать
Объект Википедии
и запросите страницу по ее названию. Язык параметра должен быть одним из поддерживаемых языков.импорт википедииапи wiki_wiki = wikipediaapi.Wikipedia('en') page_py = wiki_wiki.page('Python_(язык_программирования)')
Как проверить, существует ли вики-страница
Для проверки существования страницы вы можете использовать функцию
exists
.page_py = wiki_wiki.page('Python_(язык_программирования)') print("Страница - существует: %s" % page_py.exists()) # Страница - существует: True page_missing = wiki_wiki.page('NonExistingPageWithStrangeName') print("Страница - существует: %s" % page_missing.exists()) # Страница – существует: False
Как получить сводку страницы
Класс
Страница Википедии
имеет свойствосводка
, которое возвращает описание вики-страницы.импорт википедииапи wiki_wiki = wikipediaapi.Wikipedia('en') print("Страница - Заголовок: %s" % page_py. title) # Страница - Название: Python (язык программирования) print("Страница - Сводка: %s" % page_py.summary[0:60]) # Страница — Резюме: Python — это широко используемый язык программирования высокого уровня для
Как получить URL страницы
WikipediaPage
имеет два свойства с URL-адресом страницы. Этоfullurl
иcanonicalurl
.печать (page_py.fullurl) # https://en.wikipedia.org/wiki/Python_(язык_программирования) печать (page_py.canonicalurl) # https://en.wikipedia.org/wiki/Python_(язык_программирования)
Как получить полный текст
Чтобы получить полный текст страницы Википедии, вы должны использовать свойство
text
, которое создает текст страницы как объединение резюме и разделов с их названиями и текстами.wiki_wiki = wikipediaapi.Википедия( язык = 'en', extract_format=wikipediaapi.ExtractFormat.WIKI ) p_wiki = wiki_wiki.page("Тест 1") печать(p_wiki. текст) # Резюме # Секция 1 # Текст раздела 1 # Раздел 1.1 # Текст раздела 1.1 # ... wiki_html = wikipediaapi.Википедия( язык = 'en', extract_format=wikipediaapi.ExtractFormat.HTML ) p_html = wiki_html.page("Тест 1") печать (p_html.текст) #
Сводка
#Раздел 1
#Текст раздела 1
#Раздел 1.1
#Текст раздела 1.1
# ...Как получить разделы страницы
Чтобы получить все разделы верхнего уровня страницы, вы должны использовать свойство
section
. Он возвращает списокWikipediaPageSection
, поэтому вам нужно использовать рекурсию, чтобы получить все подразделы.def print_sections (разделы, уровень = 0): для s в разделах: print("%s: %s - %s" % ("*" * (уровень + 1), s.title, s.text[0:40])) print_sections(s.sections, уровень + 1) print_sections(page_py.sections) # *: История - Python был задуман в конце 1980-е, # *: Особенности и философия — Python — это мультипарадигмальное программирование l # *: Синтаксис и семантика — Python должен быть легко читаемым # **: Отступы — Python использует отступы с пробелами, а не # **: Операторы и поток управления — операторы Python включают (среди прочего) # **: Выражения — некоторые выражения Python похожи на l
Как получить страницу на других языках
Если вы хотите получить другие переводы данной страницы, вы должны использовать свойство
langlinks
. Это карта, где ключ — это код языка, а значение —WikipediaPage
.по умолчанию print_langlinks(страница): langlinks = страница.langlinks для k в отсортированном (langlinks.keys()): v = ленглинки[k] print("%s: %s - %s: %s" % (k, v.language, v.title, v.fullurl)) print_langlinks(page_py) # af: af - Python (программное обеспечение): https://af.wikipedia.org/wiki/Python_(программное обеспечение) # als: als — Python (Programmiersprache): https://als.wikipedia.org/wiki/Python_(Programmiersprache) # an: an - Python: https://an.wikipedia.org/wiki/Python # ар: ар - بايثون: https://ar.wikipedia.org/wiki/%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86 # as: as - পাইথন: https://as.wikipedia.org/wiki/%E0%A6%AA%E0%A6%BE%E0%A6%87%E0%A6%A5%E0%A6%A8 page_py_cs = page_py.langlinks['cs'] print("Страница - Сводка: %s" % page_py_cs.summary[0:60]) # Page - Summary: Python (englická výslovnost [ˈpaiθtən]) je vysokoúrovňový sk
Как получить ссылки на другие страницы
Если вы хотите получить все ссылки на другие вики-страницы с данной страницы, вам необходимо использовать свойство
links
. Это карта, где ключ — заголовок страницы, а значение — 9.0395 Страница Википедии .по умолчанию print_links(страница): ссылки = страница.ссылки для заголовка в sorted(links.keys()): print("%s: %s" % (название, ссылки[название])) print_links(page_py) # 3ds Max: 3ds Max (id: ??, ns: 0) # ?:: ?: (id: ??, ns: 0) # ABC (язык программирования): ABC (язык программирования) (id: ??, ns: 0) # АЛГОЛ 68: АЛГОЛ 68 (id: ??, ns: 0) # Abaqus: Abaqus (id: ??, ns: 0) # ...
Как получить категории страниц
Если вы хотите получить все категории, к которым относится страница, вы должны использовать свойство
категории
. Это карта, где ключ — название категории, а значение —WikipediaPage
.по умолчанию print_categories(страница): категории = страница.категории для заголовка в отсортированном (categories.keys()): print("%s: %s" % (название, категории[название])) распечатать("Категории") print_categories(page_py) # Категория:Все статьи, содержащие потенциально датированные утверждения: . .. # Категория: Все статьи с заявлениями без источников: ... # Категория:Статьи, содержащие потенциально датированные заявления от августа 2016 года: ... # Категория:Статьи, содержащие заявления, потенциально датированные мартом 2017 года: ... # Категория:Статьи, содержащие заявления, потенциально датированные сентябрем 2017 года: ...
Как получить все страницы из категории
Чтобы получить все страницы из данной категории, вы должны использовать свойство
categorymembers
. Он возвращает всех членов данной категории. Вы должны реализовать рекурсию и дедупликацию самостоятельно.def print_categorymembers(categorymembers, level=0, max_level=1): для c в categorymembers.values(): print("%s: %s (ns: %d)" % ("*" * (level + 1), c.title, c.ns)) если c.ns == wikipediaapi.Namespace.CATEGORY и уровень < max_level: print_categorymembers(c.categorymembers, level=level + 1, max_level=max_level) cat = wiki_wiki. page("Категория:Физика") print("Члены категории: Категория:Физика") print_categorymembers(cat.categorymembers) # Члены категории: Категория:Физика # * Статистическая механика (ns:0) # * Категория:Физические величины (ns: 14) # ** Показатель преломления (нс: 0) # ** Качество пара (ns: 0) # ** Электрическая восприимчивость (ns: 0) # ** Удельный вес (ns: 0) # ** Категория: Вязкость (ns: 14) # *** Брукфилд Инжиниринг (ns: 0)
Как увидеть базовый вызов API
Если у вас возникли проблемы с получением данных, вы можете получить URL-адрес базового вызова API. Это поможет вам определить, находится ли проблема в библиотеке или где-то еще.
импорт википедииапи импорт системы wikipediaapi.log.setLevel(level=wikipediaapi.logging.DEBUG) # Установить обработчик, если вы используете Python в интерактивном режиме out_hdlr = wikipediaapi.logging.StreamHandler(sys.stderr) out_hdlr.setFormatter(wikipediaapi.logging.Formatter('%(asctime)s %(сообщение)s')) out_hdlr.setLevel(wikipediaapi.