Introducción a la API de Wikipedia de Python

I

 

Introducción

En este artículo, usaremos la API de Wikipedia para recuperar datos de Wikipedia. El raspado de datos ha experimentado un rápido aumento debido al uso cada vez mayor de herramientas de análisis de datos y Machine Learning. Internet es la mayor fuente de información y, por lo tanto, es importante saber cómo obtener datos de varias fuentes. Y dado que Wikipedia es una de las fuentes de información más grandes y populares en Internet, este es un lugar natural para comenzar.

En este artículo, veremos cómo utilizar la API de Wikipedia de Python para obtener una variedad de información del sitio web de Wikipedia.

Instalación

Para extraer datos de Wikipedia, primero debemos instalar el Biblioteca de Wikipedia de Python, que envuelve la API oficial de Wikipedia. Esto se puede hacer ingresando el comando a continuación en su símbolo del sistema o terminal:

$ pip install wikipedia

Una vez realizada la instalación, podemos utilizar la API de Wikipedia en Python para extraer información de Wikipedia. Para llamar a los métodos del módulo de Wikipedia en Python, necesitamos importarlo usando el siguiente comando.

import wikipedia

Búsqueda de títulos y sugerencias

los search() El método realiza una búsqueda en Wikipedia de una consulta que se le proporciona como argumento. Como resultado, este método devuelve una lista de todos los títulos del artículo que contienen la consulta. Por ejemplo:

import wikipedia
print(wikipedia.search("Bill"))

Salida:

['Bill', 'The Bill', 'Bill Nye', 'Bill Gates', 'Bills, Bills, Bills', 'Heartbeat bill', 'Bill Clinton', 'Buffalo Bill', 'Bill & Ted', 'Kill Bill: Volume 1']

Como puede ver en la salida, se muestran el título buscado junto con las sugerencias de búsqueda relacionadas. Puede configurar el número de títulos de búsqueda devueltos pasando un valor para el results parámetro, como se muestra aquí:

import wikipedia
print(wikipedia.search("Bill", results=2))

Salida:

['Bill', 'The Bill']

El código anterior imprime solo 2 resultados de búsqueda de la consulta, ya que esa es la cantidad que solicitamos que se devuelva.

Digamos que necesitamos obtener las sugerencias de búsqueda de Wikipedia para un título de búsqueda, “Bill Cliton” que se ingresó incorrectamente o tiene un error tipográfico. los suggest() El método devuelve sugerencias relacionadas con la consulta de búsqueda ingresada como parámetro, o devolverá “Ninguno” si no se encuentran sugerencias.

Probémoslo aquí:

import wikipedia
print(wikipedia.suggest("Bill cliton"))

Salida:

bill clinton

Puede ver que tomó nuestra entrada incorrecta, “Bill cliton”, y devolvió la sugerencia correcta de “Bill Clinton”.

Extracción del resumen del artículo de Wikipedia

Podemos extraer el resumen de un artículo de Wikipedia utilizando el summary() método. El artículo para el que se debe extraer el resumen se pasa como parámetro a este método.

Extraigamos el resumen de “Ubuntu”:

print(wikipedia.summary("Ubuntu"))

Salida:

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".

El resumen completo se imprime en la salida. Podemos personalizar el número de frases en el texto de resumen que se mostrarán configurando el sentences argumento del método.

print(wikipedia.summary("Ubuntu", sentences=2))

Salida:

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).

Como puede ver, solo se imprimen 2 oraciones del resumen de texto de Ubuntu.

Sin embargo, tenga en cuenta que wikipedia.summary generará un “error de desambiguación” si la página no existe o la página no es ambigua. Veamos un ejemplo.

print(wikipedia.summary("key"))

El código anterior arroja un DisambiguationError ya que hay muchos artículos que coincidirían con “clave”.

Salida:

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)
...

Si hubiera querido el resumen de una “clave de criptografía”, por ejemplo, tendría que ingresarlo de la siguiente manera:

print(wikipedia.summary("Key (cryptography)"))

Con la consulta más específica, ahora obtenemos el resumen correcto en la salida.

Recuperar datos completos de la página de Wikipedia

Para obtener los contenidos, categorías, coordenadas, imágenes, enlaces y otros metadatos de una página de Wikipedia, primero debemos obtener el objeto de la página de Wikipedia o el ID de la página. Para hacer esto, el page() El método se utiliza con la página en la que el título se pasa como argumento del método.

Mira el siguiente ejemplo:

wikipedia.page("Ubuntu")

Esta llamada al método devolverá un WikipediaPage objeto, que exploraremos más en las próximas secciones.

Extraer metadatos de una página

Para obtener el contenido de texto sin formato completo de una página de Wikipedia (excluyendo imágenes, tablas, etc.), podemos usar el content atributo del page objeto.

print(wikipedia.page("Python").content)

Salida:

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.
...

Del mismo modo, podemos obtener la URL de la página utilizando el url atributo:

print(wikipedia.page("Python").url)

Salida:

https://en.wikipedia.org/wiki/Python_(programming_language)

Podemos obtener las URL de enlaces externos en una página de Wikipedia utilizando el references propiedad de la WikipediaPage objeto.

print(wikipedia.page("Python").references)

Salida:

[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', ...]

los title propiedad de la WikipediaPage El objeto se puede utilizar para extraer el título de la página.

print(wikipedia.page("Python").title)

Salida:

Python (programming language)

Del mismo modo, el categories El atributo se puede utilizar para obtener la lista de categorías de una página de Wikipedia:

print(wikipedia.page("Python").categories)

Salida

['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']

los links elemento de la WikipediaPage El objeto se puede utilizar para obtener la lista de títulos de las páginas cuyos enlaces están presentes en la página.

print(wikipedia.page("Ubuntu").links)

Salida

[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', ...]

Encontrar páginas basadas en coordenadas

los geosearch() se usa el método para hacer una Wikipedia búsqueda geográfica utilizando argumentos de latitud y longitud proporcionados como números flotantes o decimales al método.

print(wikipedia.geosearch(37.787, -122.4))

Salida:

['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']

Como puede ver, el método anterior devuelve artículos basados ​​en las coordenadas proporcionadas.

De manera similar, podemos establecer la propiedad de coordenadas del page() y obtén los artículos relacionados con la geolocalización. Por ejemplo:

print(wikipedia.page(37.787, -122.4))

Salida:

['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']

Configuración de lenguaje

Puede personalizar el idioma de una página de Wikipedia a su idioma nativo, siempre que la página exista en su idioma nativo. Para hacerlo, puede utilizar el set_lang() método. Cada idioma tiene un estándar código de prefijo que se pasa como argumento al método. Por ejemplo, obtengamos las 2 primeras frases del texto de resumen de la página wiki de “Ubuntu” en el idioma alemán.

wikipedia.set_lang("de")  
print(wikipedia.summary("ubuntu", sentences=2))  

Salida

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.

Puede consultar la lista de idiomas ISO admitidos actualmente junto con su prefijo, de la siguiente manera:

print(wikipedia.languages())

Recuperar imágenes en una página de Wikipedia

los images lista de los WikipediaPage El objeto se puede utilizar para obtener imágenes de una página de Wikipedia. Por ejemplo, el siguiente script devuelve la primera imagen de la página de Ubuntu de Wikipedia:

print(wikipedia.page("ubuntu").images[0])

Salida

https://upload.wikimedia.org/wikipedia/commons/1/1d/Bildschirmfoto_zu_ubuntu_704.png

El código anterior devuelve la URL de la imagen presente en el índice 0 en la página de Wikipedia.

Para ver la imagen, puede copiar y pegar la URL anterior en su navegador.

Recuperación del contenido completo de la página HTML

Para obtener la página de Wikipedia completa en formato HTML, puede utilizar el siguiente script:

print(wikipedia.page("Ubuntu").html())

Salida

<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>
...

Como se ve en el resultado, se muestra toda la página en formato HTML. Esto puede tardar un poco más en cargarse si el tamaño de la página es grande, así que tenga en cuenta que puede aumentar HTMLTimeoutError cuando se agota el tiempo de espera de una solicitud al servidor.

Conclusión

En este tutorial, vimos cómo se usa la API de Wikipedia para extraer datos de la web. Vimos cómo obtener una variedad de información, como el título, la categoría, los enlaces, las imágenes de una página y recuperar artículos basados ​​en ubicaciones geográficas.

 

About the author

Ramiro de la Vega

Bienvenido a Pharos.sh

Soy Ramiro de la Vega, Estadounidense con raíces Españolas. Empecé a programar hace casi 20 años cuando era muy jovencito.

Espero que en mi web encuentres la inspiración y ayuda que necesitas para adentrarte en el fantástico mundo de la programación y conseguir tus objetivos por difíciles que sean.

Add comment

Sobre mi

Últimos Post

Etiquetas

Esta web utiliza cookies propias para su correcto funcionamiento. Al hacer clic en el botón Aceptar, aceptas el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Más información
Privacidad