paint-brush
Cómo construir un raspador web de Python: extraiga datos de cualquier sitio webpor@terieyenike
8,579 lecturas
8,579 lecturas

Cómo construir un raspador web de Python: extraiga datos de cualquier sitio web

por Teri4m2022/09/08
Read on Terminal Reader
Read this story w/o Javascript

Demasiado Largo; Para Leer

Python le permite raspar o tomar datos de un sitio web con un script de Python. Este método de recopilación de datos se denomina web scraping. 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. En este ejercicio, raspamos la página de inicio del contenido de noticias, lo que podemos hacer de acuerdo con el agente de usuario. Con todo el guión escrito, nuestra página debería extraer los datos de la página de inicio de noticias de YCombinator.
featured image - Cómo construir un raspador web de Python: extraiga datos de cualquier sitio web
Teri HackerNoon profile picture

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 https://news.ycombinator.com/robots.txt .

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
  • Peticiones

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( 'https://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( 'https://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