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.
El raspador web de Python requiere dos módulos necesarios para raspar los datos:
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.
La biblioteca HTTP de solicitudes es para descargar archivos HTML utilizando el enlace al sitio web con el
.get()
función.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:
requests
módulo .get()
descarga los archivos HTML desde el enlace del sitio web proporcionado .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:
yc_web_page
utilizando la función BeautifulSoup y html.parser
para obtener los archivos HTMLAntes 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:
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. article_tag
utilizando el .get_text()
función article_tag
usando el atributo href
con el .get()
función 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ículoCon 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:
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.