Breaking

Post Top Ad

Your Ad Spot

viernes, 14 de junio de 2019

Comenzando con la API de Wikipedia de Python

Introducción

En este artículo, usaremos la API de Wikipedia para recuperar datos de Wikipedia . El raspado de datos se ha incrementado rápidamente debido al uso cada vez mayor del análisis de datos y las herramientas de aprendizaje automático. Internet es la fuente de información más grande 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 en Internet más grandes y populares, este es un lugar natural para comenzar.
En este artículo, veremos cómo usar 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 la biblioteca de Python Wikipedia , que contiene la API oficial de Wikipedia. Esto se puede hacer ingresando el siguiente comando en su símbolo del sistema o terminal:
$ pip install wikipedia
Una vez que se realiza 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  

Buscando títulos y sugerencias

El search()método realiza una búsqueda en Wikipedia de una consulta que se le proporciona como un argumento. Como resultado, este método devuelve una lista de todos los títulos de los artículos 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 se ve 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 al pasar un valor para el resultspará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 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. El suggest()método devuelve las sugerencias relacionadas con la consulta de búsqueda ingresada como un parámetro, o devolverá "Ninguna" si no se encontraron sugerencias.
Vamos a probarlo 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 de Wikipedia artículo resumen

Podemos extraer el resumen de un artículo de Wikipedia usando el summary()método. El artículo para el que se debe extraer el resumen se pasa como un 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".  
Todo el resumen está impreso en la salida. Podemos personalizar el número de oraciones en el texto de resumen que se mostrará configurando el sentencesargumento 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.summarygenerará un "error de desambiguación" si la página no existe o si la página no es ambigua. Veamos un ejemplo.
print(wikipedia.summary("key"))  
El código anterior arroja una, DisambiguationErrorya que hay muchos artículos que coincidirían con la "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 en una "clave de criptografía", por ejemplo, tendría que ingresarlo como sigue:
print(wikipedia.summary("Key (cryptography)"))  
Con la consulta más específica ahora obtenemos el resumen correcto en la salida.

Recuperando 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 página de la página. Para hacer esto, el page()método se usa con la página que el título pasó como un argumento al método.
Mira el siguiente ejemplo:
wikipedia.page("Ubuntu")  
Esta llamada al método devolverá un WikipediaPageobjeto, que exploraremos más en las siguientes secciones.

Extracción de metadatos de una página

Para obtener el contenido completo de texto sin formato de una página de Wikipedia (excluyendo imágenes, tablas, etc.), podemos usar el contentatributo del pageobjeto.
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 urlatributo:
print(wikipedia.page("Python").url)  
Salida:
https://en.wikipedia.org/wiki/Python_(programming_language)  
Podemos obtener las URL de los enlaces externos en una página de Wikipedia usando la referencespropiedad del WikipediaPageobjeto.
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', ...]
La titlepropiedad del WikipediaPageobjeto se puede utilizar para extraer el título de la página.
print(wikipedia.page("Python").title)  
Salida:
Python (programming language)  
De manera similar, el categoriesatributo se puede usar 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']
El linkselemento del WikipediaPageobjeto 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', ...]

Búsqueda de páginas basadas en coordenadas

El geosearch()método se utiliza para realizar una búsqueda geográfica de Wikipedia utilizando los 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 según las coordenadas proporcionadas.
De manera similar, podemos establecer la propiedad de coordenadas de page()y obtener 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']

Configuraciones de idioma

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 ello, puede utilizar el set_lang()método. Cada idioma tiene un código de prefijo estándar que se pasa como un argumento al método. Por ejemplo, obtengamos las 2 primeras oraciones 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

La imageslista del WikipediaPageobjeto se puede utilizar para obtener imágenes de una página de Wikipedia. Por ejemplo, la siguiente secuencia de comandos 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.

Recuperar el contenido completo de la página HTML

Para obtener la página completa de Wikipedia en formato HTML, puede usar 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 la salida, se muestra la página completa en formato HTML. Esto puede demorar un poco más en cargarse si el tamaño de la página es grande, así que tenga en cuenta que puede aumentar HTMLTimeoutErrorcuando se agota el tiempo de espera de una solicitud al servidor.

Conclusión

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

No hay comentarios.:

Publicar un comentario

Dejanos tu comentario para seguir mejorando!

Post Top Ad

Your Ad Spot

Páginas