¿Alguna vez te has preguntado cuántos datos se crean en Internet todos los días y qué pasa si quieres trabajar con esos datos? Desafortunadamente, estos datos no están organizados correctamente como algunos archivos CSV o JSON, pero afortunadamente, podemos usar web scraping para extraer los datos de Internet y usarlos de acuerdo con nuestras propias necesidades. Hay muchas formas de extraer datos y una de ellas es usar BeautifulSoup.
Antes de comenzar a aprender BeautifulSoup, aprendamos qué es un web scraping y si debemos hacerlo o no.
¿Qué es el raspado web?
En términos sencillos, web scraping es el proceso de recopilación de datos de cualquier sitio web. Es como copiar y pegar los datos de un sitio web a su propio archivo, pero de forma automática . En términos técnicos, Web Scripting es un método automático para obtener grandes cantidades de datos de sitios web. La mayoría de estos datos son datos no estructurados en formato HTML que luego se convierten en datos estructurados en una hoja de cálculo o una base de datos para que puedan usarse en varias aplicaciones.
Nota: Para obtener más información, consulte ¿Qué es Web Scraping y cómo usarlo?
Legalización del Web Scraping
La legalización del web scraping es un tema delicado, dependiendo de cómo se use, puede ser una bendición o una ruina. Por un lado, el raspado web con un buen bot permite que los motores de búsqueda indexen el contenido web, los servicios de comparación de precios para ahorrar dinero y valor al cliente. Pero el web scraping se puede reorientar para cumplir fines más maliciosos y abusivos. El web scraping se puede alinear con otras formas de automatización maliciosa, denominadas «malos bots», que permiten otras actividades dañinas como ataques de denegación de servicio, minería de datos competitiva, secuestro de cuentas, robo de datos, etc.
Ahora, después de aprender los conceptos básicos del web scraping, no perdamos más tiempo y sumerjámonos directamente en BeautifulSoup. Comencemos con la Instalación.
Instalación
Para instalar Beautifulsoup en Windows, Linux o cualquier sistema operativo, se necesitaría el paquete pip . Para verificar cómo instalar pip en su sistema operativo, consulte – Instalación de PIP – Windows || linux _ Ahora ejecute el siguiente comando en la terminal.
pip install beautifulsoup4
Consulte los artículos a continuación para conocer más formas de instalar BeautifulSoup si el método anterior no funciona para usted.
Inspección del sitio web
Antes de raspar cualquier sitio web, lo primero que debe hacer es conocer la estructura del sitio web. Esto es necesario para seleccionar los datos deseados de toda la página. Podemos hacer esto haciendo clic derecho en la página que queremos raspar y seleccionando inspeccionar elemento.
Nota: Estaremos raspando la página de programación de Python para este tutorial.
Después de hacer clic en el botón de inspección, se abren las herramientas de desarrollo del navegador. Ahora, casi todos los navegadores vienen con las herramientas de desarrollo instaladas, y usaremos Chrome para este tutorial.
Las herramientas de los desarrolladores permiten ver el Modelo de objetos del documento (DOM) del sitio . Si no conoce DOM, no se preocupe, solo considere el texto que se muestra como la estructura HTML de la página.
Obtener el HTML de la página
Después de inspeccionar el HTML de la página, todavía necesitamos obtener todo el HTML en nuestro código Python para que podamos raspar los datos deseados. Para esto, Python proporciona un módulo llamado requests. La biblioteca de requests es una de las partes integrales de Python para realizar requests HTTP a una URL específica. La instalación de las requests depende del tipo de sistema operativo que se esté usando, el comando básico en cualquier lugar sería abrir una terminal de comando y ejecutar,
pip install requests
Ahora hagamos una solicitud GET simple usando el método get() .
Ejemplo:
Python3
import requests # Making a GET request r = requests.get('https://www.geeksforgeeks.org/python-programming-language/') # check status code for response received # success code - 200 print(r) # print content of request print(r.content)
Producción:
Consulte el tutorial a continuación para obtener información detallada y bien explicada sobre el módulo de requests.
Analizando el HTML
Después de obtener el HTML de la página, veamos cómo analizar este código HTML sin procesar para obtener información útil. En primer lugar, crearemos un objeto BeautifulSoup especificando el analizador que queremos usar.
Nota: la biblioteca BeautifulSoup se basa en la parte superior de las bibliotecas de análisis de HTML como html5lib, lxml, html.parser, etc. Por lo tanto, el objeto BeautifulSoup y especificar la biblioteca del analizador se pueden crear al mismo tiempo.
Ejemplo 1:
Python3
import requests from bs4 import BeautifulSoup # Making a GET request r = requests.get('https://www.geeksforgeeks.org/python-programming-language/') # check status code for response received # success code - 200 print(r) # Parsing the HTML soup = BeautifulSoup(r.content, 'html.parser') print(soup.prettify())
Producción:
Ejemplo 2:
Python3
import requests from bs4 import BeautifulSoup # Making a GET request r = requests.get('https://www.geeksforgeeks.org/python-programming-language/') # Parsing the HTML soup = BeautifulSoup(r.content, 'html.parser') # Getting the title tag print(soup.title) # Getting the name of the tag print(soup.title.name) # Getting the name of parent tag print(soup.title.parent.name) # use the child attribute to get # the name of the child tag
Producción:
<title>Python Programming Language - GeeksforGeeks</title> title meta
Encontrar elementos
Ahora, nos gustaría extraer algunos datos útiles del contenido HTML. El objeto de sopa contiene todos los datos en la estructura anidada que podrían extraerse mediante programación. El sitio web que queremos raspar contiene mucho texto, así que ahora vamos a raspar todo ese contenido.
Primero, inspeccionemos la página web que queremos raspar.
Encontrar elementos por clase
En la imagen de arriba podemos ver que todo el contenido de la página está bajo el div con class entry-content. Almacenaremos todos los resultados encontrados en esta clase.
Ejemplo:
Python3
import requests from bs4 import BeautifulSoup # Making a GET request r = requests.get('https://www.geeksforgeeks.org/python-programming-language/') # check status code for response received # success code - 200 print(r) # Parsing the HTML soup = BeautifulSoup(r.content, 'html.parser') s = soup.find('div', class_='entry-content') print(s)
Producción:
En el ejemplo anterior, hemos utilizado la clase find . Esta clase encontrará la etiqueta dada con el atributo dado. En nuestro caso, encontrará todos los div que tengan clase como contenido de entrada. Tenemos todo el contenido del sitio, pero puede ver que todas las imágenes y enlaces también se eliminan. Entonces, nuestra próxima tarea es encontrar solo el contenido del HTML analizado anteriormente.
Inspeccionemos nuevamente el HTML de nuestro sitio web.
Podemos ver que el contenido de la página está bajo la etiqueta <p> . Ahora tenemos que encontrar todas las etiquetas p presentes en esta clase. Podemos usar la clase find_all de BeautifulSoup.
Ejemplo:
Python3
import requests from bs4 import BeautifulSoup # Making a GET request r = requests.get('https://www.geeksforgeeks.org/python-programming-language/') # Parsing the HTML soup = BeautifulSoup(r.content, 'html.parser') s = soup.find('div', class_='entry-content') lines = s.find_all('p') print(lines)
Producción:
Finalmente obtenemos todo el contenido almacenado bajo la etiqueta <p>.
Búsqueda de elementos por ID
En el ejemplo anterior, hemos encontrado los elementos por el nombre de la clase, pero veamos cómo encontrar elementos por id. Ahora, para esta tarea, raspamos el contenido de la barra izquierda de la página. El primer paso es inspeccionar la página y ver la barra izquierda bajo qué etiqueta.
La imagen de arriba muestra que la barra izquierda cae bajo la etiqueta <div> con id como principal. Ahora vamos a obtener el contenido HTML bajo esta etiqueta.
Ejemplo:
Python3
import requests from bs4 import BeautifulSoup # Making a GET request r = requests.get('https://www.geeksforgeeks.org/python-programming-language/') # Parsing the HTML soup = BeautifulSoup(r.content, 'html.parser') # finding element by id s = soup.find('div', id= 'main') print(s)
Producción:
Ahora inspeccionemos más de la página para obtener el contenido de la barra izquierda.
Podemos ver que la lista en la barra izquierda está debajo de la etiqueta <ul> con la clase como leftBarList y nuestra tarea es encontrar todos los li debajo de este ul.
Ejemplo:
Python3
import requests from bs4 import BeautifulSoup # Making a GET request r = requests.get('https://www.geeksforgeeks.org/python-programming-language/') # Parsing the HTML soup = BeautifulSoup(r.content, 'html.parser') # Finding by id s = soup.find('div', id= 'main') # Getting the leftbar leftbar = s.find('ul', class_='leftBarList') # All the li under the above ul content = leftbar.find_all('li') print(content)
Producción:
Consulte los siguientes artículos para obtener información detallada sobre cómo encontrar elementos.
- Python BeautifulSoup: encuentra todas las clases
- ¿Cómo extraer una etiqueta div y su contenido por id con BeautifulSoup?
- Encuentra los hermanos de las etiquetas usando BeautifulSoup
- Extrayendo un valor de atributo con beautifulsoup en Python
- BeautifulSoup – Encuentra todos los <li> en <ul>
- Encuentre texto usando beautifulSoup y luego reemplácelo en la variable de sopa original
- BeautifulSoup – Busca por texto dentro de una etiqueta
- BeautifulSoup: busque etiquetas por clase de CSS con selectores de CSS
Extracción de texto de las etiquetas
En los ejemplos anteriores, debe haber visto que al raspar los datos, las etiquetas también se raspan, pero ¿qué pasa si solo queremos el texto sin ninguna etiqueta? No se preocupe, discutiremos lo mismo en esta sección. Usaremos la propiedad text . Solo imprime el texto de la etiqueta. Usaremos el ejemplo anterior y eliminaremos todas las etiquetas de ellos.
Ejemplo 1: Eliminar las etiquetas del contenido de la página
Python3
import requests from bs4 import BeautifulSoup # Making a GET request r = requests.get('https://www.geeksforgeeks.org/python-programming-language/') # Parsing the HTML soup = BeautifulSoup(r.content, 'html.parser') s = soup.find('div', class_='entry-content') lines = s.find_all('p') for line in lines: print(line.text)
Producción:
Ahora hemos extraído con éxito el contenido de nuestro primer sitio web. Este script se ejecutará en todos los sistemas hasta que haya cambios en el HTML de la página web.
Ejemplo 2: Eliminando las etiquetas del contenido de la barra izquierda.
Python3
import requests from bs4 import BeautifulSoup # Making a GET request r = requests.get('https://www.geeksforgeeks.org/python-programming-language/') # Parsing the HTML soup = BeautifulSoup(r.content, 'html.parser') # Finding by id s = soup.find('div', id= 'main') # Getting the leftbar leftbar = s.find('ul', class_='leftBarList') # All the li under the above ul lines = leftbar.find_all('li') for line in lines: print(line.text)
Producción:
Consulte los siguientes artículos para obtener información detallada sobre la extracción de texto.
- Mostrar texto dentro de las etiquetas usando BeautifulSoup
- Encuentra el texto de la etiqueta dada usando BeautifulSoup
- ¿Cómo raspar todo el texto de la etiqueta del cuerpo usando Beautifulsoup en Python?
Más temas sobre BeautifulSoup
- Beautifulsoup – siguiente hermano
- BeautifulSoup – Eliminar el contenido de la etiqueta
- BeautifulSoup – Añadir al contenido de la etiqueta
- ¿Cómo eliminar un elemento secundario en BeautifulSoup?
- Impresión bonita en BeautifulSoup
- BeautifulSoup – Modificando el árbol
- Conversión de HTML a texto con BeautifulSoup
- ¿Cómo modificar HTML usando BeautifulSoup?
- Cambie el contenido de la etiqueta y reemplácelo con la string dada usando BeautifulSoup
- Elimine todas las etiquetas de estilo, secuencias de comandos y HTML con BeautifulSoup
- Inserte etiquetas o strings inmediatamente antes y después de las etiquetas especificadas usando BeautifulSoup
- ¿Cómo analizar el archivo HTML local en Python?
- ¿Cómo usar Xpath con BeautifulSoup?
- BeautifulSoup – Envuelve un elemento en una nueva etiqueta
- BeautifulSoup – Analizando solo la sección de un documento
- ¿Cómo escribir la salida en un archivo HTML con Python BeautifulSoup?
- Codificación en BeautifulSoup
- ¿Cómo raspar etiquetas anidadas usando BeautifulSoup?
- Convierta la estructura XML a DataFrame usando BeautifulSoup – Python
Ejercicios y proyectos de BeautifulSoup
- Obtenga todas las etiquetas HTML con BeautifulSoup
- Encuentre las etiquetas de título de un documento html dado usando BeautifulSoup en Python
- Extrae todas las URL que están anidadas dentro de las etiquetas <li> usando BeautifulSoup
- Obtenga una lista de todas las etiquetas de encabezado usando BeautifulSoup
- BeautifulSoup – Lista de raspado de HTML
- BeautifulSoup – Extraer párrafos de HTML
- ¿Cómo raspar todos los archivos PDF en un sitio web?
- Descargar archivos PDF con Python usando Requests y BeautifulSoup
- ¿Cómo extraer datos meteorológicos de Google en Python?
- ¿Cómo raspar videos usando Python?
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA