Автор оригинала: Guest Contributor.
Вступление
В этой статье мы будем использовать API Википедии для извлечения данных из Википедия . Скребок данных пережил стремительный всплеск благодаря все более широкому использованию инструментов анализа данных и машинного обучения. Интернет является единственным крупнейшим источником информации, и поэтому важно знать, как извлекать данные из различных источников. А поскольку Википедия является одним из крупнейших и наиболее популярных источников информации в Интернете, это естественное место для начала.
В этой статье мы увидим, как использовать API Википедии Python для получения разнообразной информации с веб-сайта Википедии.
Установка
Чтобы извлечь данные из Википедии, мы должны сначала установить библиотеку Википедии Python , которая обертывает официальный 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()
возвращает предложения, связанные с поисковым запросом, введенным в качестве параметра, или возвращает “None”, если предложения не были найдены.
Давайте попробуем здесь:
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"))
Приведенный выше код выдает ошибку Disambiguation
, так как существует много статей, которые соответствовали бы “ключу”.
Выход:
Traceback (most recent call last): File "", line 1, in 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")
Этот вызов метода вернет a Страница Википедии
объект, который мы рассмотрим подробнее в следующих нескольких разделах.
Извлечение метаданных страницы
Чтобы получить полное текстовое содержимое страницы Википедии (за исключением изображений, таблиц и т. Д.), Мы можем использовать атрибут 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
объекта Wikipedia Page
.
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
объекта Wikipedia Page
может быть использовано для извлечения заголовка страницы.
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
объекта Wikipedia Page
можно использовать для получения списка заголовков страниц, ссылки на которые присутствуют на странице.
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()
используется для выполнения поиска в Википедии geo с использованием аргументов широты и долготы, предоставленных методу в виде плавающих или десятичных чисел.
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
объекта Wikipedia Page
можно использовать для извлечения изображений со страницы Википедии. Например, следующий скрипт возвращает первое изображение со страницы 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())
Выход
...
Как видно из выходных данных, отображается вся страница в формате HTML. Это может занять немного больше времени для загрузки, если размер страницы большой, поэтому имейте в виду, что он может вызвать ошибку HTML Timeout
, когда запрос к серверу истекает.
Вывод
В этом уроке мы познакомились с использованием API Википедии для извлечения данных из Интернета. Мы видели, как получить разнообразную информацию, такую как название страницы, категория, ссылки, изображения, и получить статьи, основанные на географическом местоположении.