van tutorial rossum guido español descargar caracteristicas python wikipedia

tutorial - Extraiga el primer párrafo de un artículo de Wikipedia(Python)



python español (10)

¿Cómo puedo extraer el primer párrafo de un artículo de Wikipedia, usando Python?

Por ejemplo, para Albert Einstein , eso sería:

Albert Einstein (pronunciado / ælbərt aɪnstaɪn /; alemán: [albɐt aɪnʃtaɪn] (escuchar); 14 de marzo de 1879 - 18 de abril de 1955) fue un físico teórico, filósofo y autor ampliamente considerado como uno de los científicos e intelectuales más influyentes e icónicos. de todos los tiempos. Un premio Nobel alemán-suizo, Einstein es a menudo considerado como el padre de la física moderna. [2] Recibió el Premio Nobel de Física de 1921 "por sus servicios a la física teórica, y especialmente por su descubrimiento de la ley del efecto fotoeléctrico". [3]


Como han dicho otros, un enfoque es usar la API de wikimedia y urllib o urllib2. Los fragmentos de código a continuación son parte de lo que utilicé para extraer lo que se llama la sección "lead", que tiene el resumen del artículo y el cuadro de información. Esto verificará si el texto devuelto es una redirección en lugar de contenido real, y también le permitirá omitir el cuadro de información si está presente (en mi caso utilicé un código diferente para extraer y formatear el cuadro de información.

contentBaseURL=''http://en.wikipedia.org/w/index.php?title='' def getContent(title): URL=contentBaseURL+title+''&action=raw&section=0'' f=urllib.urlopen(URL) rawContent=f.read() return rawContent infoboxPresent = 0 # Check if a redirect was returned. If so, go to the redirection target if rawContent.find(''#REDIRECT'') == 0: rawContent = getFullContent(title) # extract the redirection title # Extract and format the Infobox redirectStart=rawContent.find(''#REDIRECT[['')+11 count = 0 redirectEnd = 0 for i, char in enumerate(rawContent[redirectStart:-1]): if char == "[": count += 1 if char == "]}": count -= 1 if count == 0: redirectEnd = i+redirectStart+1 break redirectTitle = rawContent[redirectStart:redirectEnd] print ''redirectTitle is: '',redirectTitle rawContent = getContent(redirectTitle) # Skip the Infobox infoboxStart=rawContent.find("{{Infobox") #Actually starts at the double {''s before "Infobox" count = 0 infoboxEnd = 0 for i, char in enumerate(rawContent[infoboxStart:-1]): if char == "{": count += 1 if char == "}": count -= 1 if count == 0: infoboxEnd = i+infoboxStart+1 break if infoboxEnd <> 0: rawContent = rawContent[infoboxEnd:]

Recibirás el texto sin procesar, incluido el marcado de wiki, por lo que tendrás que hacer un poco de limpieza. Si solo desea el primer párrafo, no toda la primera sección, busque el primer carácter de la nueva línea.


Escribí una biblioteca de Python que pretende hacer esto muy fácil. Compruébalo en Github .

Para instalarlo, ejecuta

$ pip install wikipedia

Luego, para obtener el primer párrafo de un artículo, simplemente use la función wikipedia.summary .

>>> import wikipedia >>> print wikipedia.summary("Albert Einstein", sentences=2)

huellas dactilares

Albert Einstein (/ ælbərt aɪnstaɪn /; alemán: [albɐt aɪnʃtaɪn] (escuchar); 14 de marzo de 1879 - 18 de abril de 1955) fue un físico teórico de origen alemán que desarrolló la teoría general de la relatividad, uno de los dos pilares de la física moderna ( junto con la mecánica cuántica). Aunque mejor conocido por su fórmula de equivalencia de masa-energía E = mc2 (que ha sido llamada "la ecuación más famosa del mundo"), recibió el Premio Nobel de Física de 1921 "por sus servicios a la física teórica, y especialmente por su descubrimiento de la ley del efecto fotoeléctrico ".

En cuanto a cómo funciona, wikipedia realiza una solicitud a la extensión de la interfaz móvil de MediaWiki API, que devuelve versiones amigables para dispositivos móviles de los artículos de Wikipedia. Para ser específicos, al pasar los parámetros prop=extracts&exsectionformat=plain , los servidores de MediaWiki analizarán el texto de Wikitext y devolverán un resumen de texto sin formato del artículo que está solicitando, incluyendo e incluyendo el texto completo de la página. También acepta los parámetros exchars y exsentences , que, como es exsentences , limitan el número de caracteres y oraciones devueltos por la API.


Hace un tiempo, hice dos clases para obtener artículos de Wikipedia en texto sin formato. Sé que no son la mejor solución, pero puedes adaptarla a tus necesidades:

wikipedia.py
wiki2plain.py

Puedes usarlo así:

from wikipedia import Wikipedia from wiki2plain import Wiki2Plain lang = ''simple'' wiki = Wikipedia(lang) try: raw = wiki.article(''Uruguay'') except: raw = None if raw: wiki2plain = Wiki2Plain(raw) content = wiki2plain.text


La relativamente nueva API REST tiene un método de summary que es perfecto para este uso, y hace muchas de las cosas mencionadas en las otras respuestas aquí (por ejemplo, eliminar wikicode). Incluso incluye una imagen y geocoordinates, si corresponde.

Usando el encantador módulo de requests y Python 3:

import requests r = requests.get("https://en.wikipedia.org/api/rest_v1/page/summary/Amsterdam") page = r.json() print(page["extract"]) # Returns ''Amsterdam is the capital and...''


Lo que hice fue esto:

import urllib import urllib2 from BeautifulSoup import BeautifulSoup article= "Albert Einstein" article = urllib.quote(article) opener = urllib2.build_opener() opener.addheaders = [(''User-agent'', ''Mozilla/5.0'')] #wikipedia needs this resource = opener.open("http://en.wikipedia.org/wiki/" + article) data = resource.read() resource.close() soup = BeautifulSoup(data) print soup.find(''div'',id="bodyContent").p



Pruebe el pattern .

pip install pattern from pattern.web import Wikipedia article = Wikipedia(language="af").search(''Kaapstad'', throttle=10) print article.string


Pruebe una combinación de urllib para buscar el sitio y BeautifulSoup o lxml para analizar los datos.



Wikipedia ejecuta una extensión MediaWiki que proporciona exactamente esta funcionalidad como un módulo API. TextExtracts implementa action=query&prop=extracts con opciones para devolver las primeras N oraciones y / o solo la introducción, como HTML o texto sin formato.

Esta es la llamada de API que desea realizar, pruébelo: https://en.wikipedia.org/w/api.php?action=query&prop=extracts&titles=Albert%20Einstein&exintro=&exsentences=2&explaintext=&redirects=&formatversion=2

  • action=query&prop=extracts para solicitar esta información
  • (ex) oraciones = 2, (ex) intro =, (ex) texto sin formato, son parámetros del módulo (vea el primer enlace para su documento API) pidiendo dos oraciones de la introducción como texto sin formato; deje este último para HTML.
  • redirects= (true) así que si pides "titles = Einstein" obtendrás la información de la página de Albert Einstein
  • formatversion=2 para un formato más limpio en UTF-8.

Hay varias bibliotecas que envuelven la invocación de la API de acción de MediaWiki, como la que se encuentra en la respuesta de DGund, pero no es demasiado difícil hacer las llamadas de API usted mismo.

La información de la página en los resultados de búsqueda trata de obtener este extracto de texto, junto con obtener una descripción y una imagen principal para los artículos.