Вступление
В этой статье мы будем использовать API Википедии для получения данных из Википедии . Сбор данных резко вырос из-за все более широкого использования инструментов анализа данных и машинного обучения. Интернет - самый крупный источник информации, поэтому важно знать, как получать данные из различных источников. А поскольку Википедия является одним из крупнейших и самых популярных источников информации в Интернете, это естественное место для начала.
В этой статье мы увидим, как использовать Python Wikipedia API для получения различной информации с веб-сайта Wikipedia.
Монтаж
Чтобы извлечь данные из Википедии, мы должны сначала установить библиотеку Python Wikipedia , которая является оболочкой для официального API Википедии. Это можно сделать, введя следующую команду в командной строке или в терминале:
$ pip install wikipedia
После завершения установки мы можем использовать API Википедии в Python для извлечения информации из Википедии. Чтобы вызвать методы модуля Википедии в Python, нам нужно импортировать его с помощью следующей команды.
import wikipedia
Поиск заголовков и предложений
Метод search()
выполняет поиск в Википедии запроса, который передается
ему в качестве аргумента. В результате этот метод возвращает список всех
заголовков статей, содержащих запрос. Например:
import wikipedia
print(wikipedia.search("Bill"))
Выход:
['Bill', 'The Bill', 'Bill Nye', 'Bill Gates', 'Bills, Bills, Bills', 'Heartbeat bill', 'Bill Clinton', 'Buffalo Bill', 'Bill & Ted', 'Kill Bill: Volume 1']
Как вы видите в выходных данных, отображается искомый заголовок вместе с
соответствующими поисковыми предложениями. Вы можете настроить
количество возвращаемых заголовков поиска, передав значение results
,
как показано здесь:
import wikipedia
print(wikipedia.search("Bill", results=2))
Выход:
['Bill', 'The Bill']
Приведенный выше код печатает только 2 результата поиска по запросу, поскольку именно столько мы просили вернуть.
Допустим, нам нужно получить предложения по поиску в Википедии для
заголовка поиска «Билл Клитон», который введен неправильно или содержит
опечатку. suggest()
возвращает предложения, связанные с поисковым
запросом, введенным в качестве параметра для него, или возвращает «Нет»,
если предложения не были найдены.
Давайте попробуем здесь:
import wikipedia
print(wikipedia.suggest("Bill cliton"))
Выход:
bill clinton
Вы можете видеть, что он взял неверную запись «Билл Клитон» и вернул правильное предложение «Билл Клинтон».
Извлечение резюме статьи из Википедии
Мы можем извлечь резюме статьи из Википедии, используя метод summary()
. Статья, для которой необходимо извлечь сводку, передается в этот метод
в качестве параметра.
Давайте извлечем резюме для "Ubuntu":
print(wikipedia.summary("Ubuntu"))
Выход:
Ubuntu ( (listen)) is a free and open-source Linux distribution based on Debian. Ubuntu is officially released in three editions: Desktop, Server, and Core (for the internet of things devices and robots). Ubuntu is a popular operating system for cloud computing, with support for OpenStack.Ubuntu is released every six months, with long-term support (LTS) releases every two years. The latest release is 19.04 ("Disco Dingo"), and the most recent long-term support release is 18.04 LTS ("Bionic Beaver"), which is supported until 2028. Ubuntu is developed by Canonical and the community under a meritocratic governance model. Canonical provides security updates and support for each Ubuntu release, starting from the release date and until the release reaches its designated end-of-life (EOL) date. Canonical generates revenue through the sale of premium services related to Ubuntu. Ubuntu is named after the African philosophy of Ubuntu, which Canonical translates as "humanity to others" or "I am what I am because of who we all are".
На выходе печатается вся сводка. Мы можем настроить количество
предложений в итоговом тексте, которое будет отображаться, настроив
sentences
метода.
print(wikipedia.summary("Ubuntu", sentences=2))
Выход:
Ubuntu ( (listen)) is a free and open-source Linux distribution based on Debian. Ubuntu is officially released in three editions: Desktop, Server, and Core (for the internet of things devices and robots).
Как видите, печатаются только 2 предложения текстового резюме Ubuntu.
Однако имейте в виду, что wikipedia.summary
вызовет «ошибку
неоднозначности», если страница не существует или страница является
неоднозначной. Посмотрим на пример.
print(wikipedia.summary("key"))
Приведенный выше код DisambiguationError
поскольку есть много статей,
которые соответствуют ключевому слову.
Выход:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Library/Python/2.7/site-packages/wikipedia/util.py", line 28, in __call__
ret = self._cache[key] = self.fn(*args, **kwargs)
File "/Library/Python/2.7/site-packages/wikipedia/wikipedia.py", line 231, in summary
page_info = page(title, auto_suggest=auto_suggest, redirect=redirect)
File "/Library/Python/2.7/site-packages/wikipedia/wikipedia.py", line 276, in page
return WikipediaPage(title, redirect=redirect, preload=preload)
File "/Library/Python/2.7/site-packages/wikipedia/wikipedia.py", line 299, in __init__
self.__load(redirect=redirect, preload=preload)
File "/Library/Python/2.7/site-packages/wikipedia/wikipedia.py", line 393, in __load
raise DisambiguationError(getattr(self, 'title', page['title']), may_refer_to)
wikipedia.exceptions.DisambiguationError: "Key" may refer to:
Key (cryptography)
Key (lock)
Key (map)
...
Если вы хотели получить сводку, например, о «криптографическом ключе», вам нужно было бы ввести его следующим образом:
print(wikipedia.summary("Key (cryptography)"))
С более конкретным запросом мы теперь получаем правильную сводку на выходе.
Получение полных данных страницы Википедии
Чтобы получить содержимое, категории, координаты, изображения, ссылки и
другие метаданные страницы Википедии, мы должны сначала получить объект
страницы Википедии или идентификатор страницы для страницы. Для этого
используется метод page()
со страницей, заголовок которой передается в
качестве аргумента методу.
Взгляните на следующий пример:
wikipedia.page("Ubuntu")
Этот вызов метода вернет WikipediaPage
, который мы подробнее
рассмотрим в следующих нескольких разделах.
Извлечение метаданных страницы
Чтобы получить полное текстовое содержимое страницы Википедии (исключая
изображения, таблицы и т. Д.), Мы можем использовать атрибут content
объекта page
print(wikipedia.page("Python").content)
Выход:
Python is an interpreted, high-level, general-purpose programming language. Created by Guido van Rossum and first released in 1991, Python's design philosophy emphasizes code readability with its notable use of significant whitespace. Its language constructs and object-oriented approach aims to help programmers write clear, logical code for small and large-scale projects.Python is dynamically typed and garbage-collected. It supports multiple programming paradigms, including procedural, object-oriented, and functional programming. Python is often described as a "batteries included" language due to its comprehensive standard library.Python was conceived in the late 1980s as a successor to the ABC language. Python 2.0, released 2000, introduced features like list comprehensions and a garbage collection system capable of collecting reference cycles.
...
Точно так же мы можем получить URL-адрес страницы с помощью атрибута
url
print(wikipedia.page("Python").url)
Выход:
https://en.wikipedia.org/wiki/Python_(programming_language)
Мы можем получить URL - адреса внешних ссылок на странице Википедии,
используя references
свойство WikipediaPage
объекта.
print(wikipedia.page("Python").references)
Выход:
[u'http://www.computerworld.com.au/index.php/id;66665771', u'http://neopythonic.blogspot.be/2009/04/tail-recursion-elimination.html', u'http://www.amk.ca/python/writing/gvr-interview', u'http://cdsweb.cern.ch/journal/CERNBulletin/2006/31/News%20Articles/974627?ln=en', u'http://www.2ality.com/2013/02/javascript-influences.html', ...]
Свойство title
объекта WikipediaPage
можно использовать для
извлечения заголовка страницы.
print(wikipedia.page("Python").title)
Выход:
Python (programming language)
Аналогичным образом categories
можно использовать для получения списка
категорий страницы Википедии:
print(wikipedia.page("Python").categories)
Выход
['All articles containing potentially dated statements', 'Articles containing potentially dated statements from August 2016', 'Articles containing potentially dated statements from December 2018', 'Articles containing potentially dated statements from March 2018', 'Articles with Curlie links', 'Articles with short description', 'Class-based programming languages', 'Computational notebook', 'Computer science in the Netherlands', 'Cross-platform free software', 'Cross-platform software', 'Dutch inventions', 'Dynamically typed programming languages', 'Educational programming languages', 'Good articles', 'High-level programming languages', 'Information technology in the Netherlands', 'Object-oriented programming languages', 'Programming languages', 'Programming languages created in 1991', 'Python (programming language)', 'Scripting languages', 'Text-oriented programming languages', 'Use dmy dates from August 2015', 'Wikipedia articles with BNF identifiers', 'Wikipedia articles with GND identifiers', 'Wikipedia articles with LCCN identifiers', 'Wikipedia articles with SUDOC identifiers']
Элемент links
WikipediaPage
может использоваться для получения
списка заголовков страниц, ссылки на которые присутствуют на странице.
print(wikipedia.page("Ubuntu").links)
Выход
[u'/e/ (operating system)', u'32-bit', u'4MLinux', u'ALT Linux', u'AMD64', u'AOL', u'APT (Debian)', u'ARM64', u'ARM architecture', u'ARM v7', ...]
Поиск страниц по координатам
Метод geosearch()
используется для выполнения географического
поиска в Википедии с
использованием аргументов широты и долготы, передаваемых методу в виде
чисел с плавающей запятой или десятичных чисел.
print(wikipedia.geosearch(37.787, -122.4))
Выход:
['140 New Montgomery', 'New Montgomery Street', 'Cartoon Art Museum', 'San Francisco Bay Area Planning and Urban Research Association', 'Academy of Art University', 'The Montgomery (San Francisco)', 'California Historical Society', 'Palace Hotel Residential Tower', 'St. Regis Museum Tower', 'Museum of the African Diaspora']
Как видите, указанный выше метод возвращает статьи на основе предоставленных координат.
Точно так же мы можем установить свойство координат page()
и получить
статьи, связанные с геолокацией. Например:
print(wikipedia.page(37.787, -122.4))
Выход:
['140 New Montgomery', 'New Montgomery Street', 'Cartoon Art Museum', 'San Francisco Bay Area Planning and Urban Research Association', 'Academy of Art University', 'The Montgomery (San Francisco)', 'California Historical Society', 'Palace Hotel Residential Tower', 'St. Regis Museum Tower', 'Museum of the African Diaspora']
Языковые настройки
Вы можете настроить язык страницы Википедии на свой родной язык, если
страница существует на вашем родном языке. Для этого вы можете
использовать метод set_lang()
. У каждого языка есть стандартный
префиксный код,
который передается методу в качестве аргумента. Например, давайте
получим первые 2 предложения итогового текста вики-страницы «Ubuntu» на
немецком языке.
wikipedia.set_lang("de")
print(wikipedia.summary("ubuntu", sentences=2))
Выход
Ubuntu (auch Ubuntu Linux) ist eine Linux-Distribution, die auf Debian basiert. Der Name Ubuntu bedeutet auf Zulu etwa „Menschlichkeit“ und bezeichnet eine afrikanische Philosophie.
Вы можете проверить список поддерживаемых в настоящее время языков ISO вместе с его префиксом, как показано ниже:
print(wikipedia.languages())
Получение изображений на странице Википедии
Список images
WikipediaPage
можно использовать для получения
изображений со страницы Википедии. Например, следующий скрипт возвращает
первое изображение со страницы Ubuntu в Википедии:
print(wikipedia.page("ubuntu").images[0])
Выход
https://upload.wikimedia.org/wikipedia/commons/1/1d/Bildschirmfoto_zu_ubuntu_704.png
Приведенный выше код возвращает URL-адрес изображения, присутствующего в индексе 0 на странице Википедии.
Чтобы увидеть изображение, вы можете скопировать и вставить указанный выше URL-адрес в свой браузер.
Получение полного содержимого HTML-страницы
Чтобы получить полную страницу Википедии в формате HTML, вы можете использовать следующий скрипт:
print(wikipedia.page("Ubuntu").html())
Выход
<div class="mw-parser-output"><div role="note" class="hatnote navigation-not-searchable">For the African philosophy, see <a href="/wiki/Ubuntu_philosophy" title="Ubuntu philosophy">Ubuntu philosophy</a>. For other uses, see <a href="/wiki/Ubuntu_(disambiguation)" class="mw-disambig" title="Ubuntu (disambiguation)">Ubuntu (disambiguation)</a>.</div>
<div class="shortdescription nomobile noexcerpt noprint searchaux" style="display:none">Linux distribution based on Debian</div>
...
Как видно на выходе, отображается вся страница в формате HTML. Это может
занять немного больше времени для загрузки, если размер страницы
большой, поэтому имейте в виду, что он может вызвать HTMLTimeoutError
когда истекает время ожидания запроса к серверу.
Заключение
В этом руководстве мы получили представление об использовании API Википедии для извлечения данных из Интернета. Мы увидели, как получить различную информацию, такую как заголовок страницы, категория, ссылки, изображения, а также получить статьи на основе географических местоположений.