En este artículo, crearemos un programa que le permita raspar o capturar datos de un sitio web con un script de Python. Este método de recopilación de datos se denomina web scraping. El raspado web se trata de usar Python o cualquier otro lenguaje de programación mediante programación para descargar, limpiar y usar los datos de una página web. La mayoría de los sitios web no quieren que raspe sus datos, y para averiguar qué es legal y permitido para raspar, los sitios web tienen una página dedicada que muestra los detalles de los puntos finales permitidos. Adjunte robots.txt al final de cualquier enlace para conocer los puntos finales permitidos. Por ejemplo, usemos . El resultado debería verse así con este archivo de texto a continuación:
La captura de pantalla indica qué puntos finales se nos permite y qué no se nos permite raspar del sitio web de YCombinator. Un retraso de rastreo significa una pausa cuando se extraen datos del sitio web con programas, por lo que no se sobrecargan sus servidores y se ralentiza el sitio web debido al raspado constante. En este ejercicio, raspamos la página de inicio del contenido de noticias, lo que podemos hacer de acuerdo con el agente de usuario.
Empezando
El raspador web de Python requiere dos módulos necesarios para raspar los datos:
hermosa sopa
Beautiful Soup es una biblioteca de Python para extraer datos de archivos HTML. Modifica el archivo usando un analizador, convierte los datos en un documento valioso y ahorra a los programadores horas de trabajo manual y repetitivo.
Peticiones
La biblioteca HTTP de solicitudes es para descargar archivos HTML utilizando el enlace al sitio web con el
.get()
función.
Creando un Web Scraper
Ahora al meollo de la cuestión de este proyecto. Cree un nuevo directorio y, allí, un archivo que contendrá todos los scripts para el programa web scraper. Copia y pega el siguiente código:
# app.py import requests response = requests.get( '//news.ycombinator.com/news' ) yc_web_page = response.text print(yc_web_page)
El código anterior hace lo siguiente:
- Importando el
requests
módulo - Usando la variable de respuesta, las solicitudes adjuntas a la
.get()
descarga los archivos HTML desde el enlace del sitio web proporcionado - Leer el contenido de la página web con
.text
Si ejecuta este código con el comando python
app.py
y no le da ninguna salida, significa que los dos módulos importados deben instalarse. Ejecute los siguientes comandos para instalar los módulos.
pip3 install requests pip install beautifulsoup4
El resultado del código fuente debería verse así:
A continuación, actualicemos el
app.py
archivo con el resto del código usando sopa hermosa:
# main.py import requests from bs4 import BeautifulSoup # add this
response = requests.get( '//news.ycombinator.com/news' ) yc_web_page = response.text # add this
soup = BeautifulSoup(yc_web_page, 'html.parser' ) article_tag = soup.find(name= "a" , class_= 'titlelink' ) article_title = article_tag.get_text() article_link = article_tag.get( 'href' ) article_upvote = soup.find(name= "span" , class_= "score" ).get_text() result = { "title" : article_title, "link" : article_link, "point" : article_upvote } print(result)
Siga el fragmento de código anterior haciendo lo siguiente:
- Importe la función BeautifulSoup del módulo bs4
- A continuación, utilice la sopa de variables para analizar el documento desde el
yc_web_page
utilizando la función BeautifulSoup y html.parser
para obtener los archivos HTML
Antes de repasar el resto del código, abramos nuestro navegador web con el enlace provisto en
.get()
A continuación, haga clic con el botón derecho en la página y haga clic en inspeccionar para ver la pestaña de elementos de la página de noticias de YCombinator .
Nuestra página web debería verse así:
Con Beautiful Soup, podemos apuntar a elementos específicos en la página con sus nombres de clase:
- Al asignar la variable article_tag, cada elemento de la página tiene un nombre de etiqueta usando el
find()
función con el nombre del elemento, la etiqueta a y la class_
con un guión bajo. Esto se hace para evitar que se sobrescriba la clase en el elemento de la página web.
- Ahora, queremos extraer uno de los títulos de enlace del
article_tag
utilizando el .get_text()
función - A continuación, extraiga el enlace de la
article_tag
usando el atributo href
con el .get()
función - Lo mismo se aplica a la
article_upvote
variable, donde el nombre de la etiqueta, <span>
, y el nombre de la clase se utilizan para extraer los puntos de cada enlace del artículo - Cree un resultado variable que mostrará los datos extraídos como un diccionario con el par de clave y valor
- Imprime el resultado final
Con todo el guión escrito, nuestra página debería extraer los datos de la página de inicio de noticias de YCombinator y tener este aspecto:
Conclusión
Este artículo le enseñó cómo usar Python web scraper para extraer datos de una página web. Además, las funcionalidades de usar un raspador web son que ahorra tiempo y esfuerzo en la producción de grandes conjuntos de datos más rápido que manualmente.
Aprende más