En este artículo, aprenderemos cómo extraer datos de Wikipedia usando Python. Aquí usamos dos métodos para extraer datos.
Método 1: Usando el módulo de Wikipedia
En este método, utilizaremos el módulo de Wikipedia para extraer datos. Wikipedia es una enciclopedia en línea multilingüe creada y mantenida como un proyecto de colaboración abierta por una comunidad de editores voluntarios que utilizan un sistema de edición basado en wiki.
Para la instalación, ejecute este comando en su terminal.
pip install wikipedia
Datos de Wikipedia, se extraerán aquí: –
- resumen, titulo
- Contenido de página
- Obtenga la lista de la fuente de la imagen y la URL de la página
- Diferentes categorías
Extraiga los datos uno por uno:
1. Extrayendo resumen y página
Sintaxis: wikipedia.summary(“Introducir consulta”)
wikipedia.page(“Ingresar Consulta”).title
Python3
import wikipedia wikipedia.summary("Python (programming language)")
Producción:
2. Contenido de la página:
Para extraer el contenido de un artículo, utilizaremos el método page() y la propiedad de contenido para obtener los datos reales.
Sintaxis: wikipedia.page(“Introducir consulta”).content
Python3
wikipedia.page("Python (programming language)").content
Producción:
3. Extraiga imágenes de Wikipedia.
Sintaxis: wikipedia.page(“Introducir consulta”).images
Python3
wikipedia.page("Python (programming language)").images
Producción:
4. extraiga la URL de la página actual:
Use el método page() y la propiedad url .
Sintaxis: wikipedia.page(“Introducir consulta”).url
Python3
wikipedia.page('"Hello, World!" program').url
Producción:
'https://en.wikipedia.org/wiki/%22Hello,_World!%22_program'
5. Obtenga la lista de categorías de artículos.
Utilice el método page() y la propiedad de categorías .
Sintaxis: wikipedia.page(“Introducir consulta”).categories
Python3
wikipedia.page('"Hello, World!" program').categories
Producción:
['Articles with example code', 'Articles with short description', 'Commons category link is on Wikidata', 'Computer programming folklore', 'Short description is different from Wikidata', 'Test items in computer languages', 'Webarchive template wayback links']
6. Obtenga la lista de todos los enlaces a un artículo
Sintaxis: wikipedia.page(“Introducir consulta”).links
Python3
wikipedia.page('"Hello, World!" program').links
Producción:
7. Obtenga datos en diferentes idiomas.
Ahora veremos la conversión de idioma, para convertir a otro idioma usaremos el método set_lang() .
Sintaxis: wikipedia.set_lang(“Ingrese el tipo de idioma”)
Python3
wikipedia.set_lang("hi") wikipedia.summary('"Hello, World!" program')
Producción:
Método 2: Uso de requests , BeautifulSoup
En este método, utilizaremos Web Scraping.
Para raspar en Python usaremos dos módulos:
- bs4: Beautiful Soup (bs4) es una biblioteca de Python para extraer datos de archivos HTML y XML. Este módulo no viene integrado con Python. Para instalar este tipo, escriba el siguiente comando en la terminal.
pip install bs4
- requests: las requests le permiten enviar requests HTTP/1.1 de forma extremadamente sencilla. Este módulo tampoco viene integrado con Python. Para instalar este tipo, escriba el siguiente comando en la terminal.
pip install requests
Los datos serán extraídos:-
- Párrafos
- Imágenes
- Lista de Imágenes
- encabezados
- Contenido no deseado (Contenido restante)
Acercarse:
- Obtener código HTML
- Desde el código HTML, obtenga el contenido de la etiqueta del cuerpo interior
- Iterar
Python3
# Import Module from bs4 import * import requests # Given URL url = "https://en.wikipedia.org/wiki/Beautiful_Soup_(HTML_parser)" # Fetch URL Content r = requests.get(url) # Get body content soup = BeautifulSoup(r.text,'html.parser').select('body')[0] # Initialize variable paragraphs = [] images = [] link = [] heading = [] remaining_content = [] # Iterate through all tags for tag in soup.find_all(): # Check each tag name # For Paragraph use p tag if tag.name=="p": # use text for fetch the content inside p tag paragraphs.append(tag.text) # For Image use img tag elif tag.name=="img": # Add url and Image source URL images.append(url+tag['src']) # For Anchor use a tag elif tag.name=="a": # convert into string and then check href # available in tag or not if "href" in str(tag): # In href, there might be possible url is not there # if url is not there if "https://en.wikipedia.org/w/" not in str(tag['href']): link.append(url+tag['href']) else: link.append(tag['href']) # Similarly check for heading # Six types of heading are there (H1, H2, H3, H4, H5, H6) # check each tag and fetch text elif "h" in tag.name: if "h1"==tag.name: heading.append(tag.text) elif "h2"==tag.name: heading.append(tag.text) elif "h3"==tag.name: heading.append(tag.text) elif "h4"==tag.name: heading.append(tag.text) elif "h5"==tag.name: heading.append(tag.text) else: heading.append(tag.text) # Remain content will store here else: remaining_content.append(tag.text) print(paragraphs, images, link, heading, remaining_content)
- contenido del cuerpo y obtener los datos anteriores
A continuación se muestra la implementación completa:
Python3
# Import Module from bs4 import * import requests # Given URL url = "https://en.wikipedia.org/wiki/Beautiful_Soup_(HTML_parser)" # Fetch URL Content r = requests.get(url) # Get body content soup = BeautifulSoup(r.text,'html.parser').select('body')[0] # Initialize variable paragraphs = [] images = [] link = [] heading = [] remaining_content = [] # Iterate through all tags for tag in soup.find_all(): # Check each tag name # For Paragraph use p tag if tag.name=="p": # use text for fetch the content inside p tag paragraphs.append(tag.text) # For Image use img tag elif tag.name=="img": # Add url and Image source URL images.append(url+tag['src']) # For Anchor use a tag elif tag.name=="a": # convert into string and then check href # available in tag or not if "href" in str(tag): # In href, there might be possible url is not there # if url is not there if "https://en.wikipedia.org/w/" not in str(tag['href']): link.append(url+tag['href']) else: link.append(tag['href']) # Similarly check for heading # Six types of heading are there (H1, H2, H3, H4, H5, H6) # check each tag and fetch text elif "h" in tag.name: if "h1"==tag.name: heading.append(tag.text) elif "h2"==tag.name: heading.append(tag.text) elif "h3"==tag.name: heading.append(tag.text) elif "h4"==tag.name: heading.append(tag.text) elif "h5"==tag.name: heading.append(tag.text) else: heading.append(tag.text) # Remain content will store here else: remaining_content.append(tag.text) print(paragraphs, images, link, heading, remaining_content)
Ejemplo: