Unleash the full potential of your business in the digital world


Cómo hacer Web Scraping con Python en 5 minutos.

James Huang | 2021.07.08

Web Scraping

El web scraping es una técnica para acceder y extraer automáticamente grandes cantidades de información de un sitio web, lo que puede ahorrar una gran cantidad de tiempo y esfuerzo. En este artículo, analizaremos un ejemplo fácil de cómo descargar automáticamente cientos de archivos del New York MTA. Este es un gran ejercicio para principiantes en web scraping que buscan comprender cómo hacerlo. El web scraping puede ser ligeramente intimidante, por lo que este tutorial desglosará el proceso de cómo llevarlo a cabo.

Descargaremos datos de los torniquetes de este sitio:

http://web.mta.info/developers/turnstile.html

Los datos de los torniquetes se recopilan cada semana desde mayo de 2010 hasta la actualidad, por lo que existen cientos de archivos .txt en el sitio. Sería tortuoso hacer clic derecho en cada enlace y guardarlos en tu escritorio manualmente.

Notas importantes sobre el web scraping:

Lea los Términos y Condiciones del sitio web para comprender cómo puede utilizar legalmente los datos. La mayoría de los sitios prohíben el uso de los datos con fines comerciales. Asegúrese de no descargar datos a una velocidad demasiado rápida, ya que esto puede dañar el sitio web. También puede ser bloqueado del sitio potencialmente.

Inspeccionando el sitio web

Lo primero que debemos hacer es averiguar dónde podemos encontrar los enlaces a los archivos que queremos descargar dentro de los múltiples niveles de etiquetas HTML. En pocas palabras, hay mucho código en una página web y queremos encontrar las partes relevantes del código que contienen nuestros datos. Si no estás familiarizado con las etiquetas HTML, consulta los tutoriales de W3Schools. Es importante entender los conceptos básicos de HTML para raspar datos web con éxito. En el sitio web, haz clic derecho y luego en "Inspeccionar". Esto te permitirá ver el código fuente detrás del sitio. Una vez que hayas hecho clic en "Inspeccionar", deberías ver aparecer esta consola.

Si haces clic en esta flecha y luego clic en un área del sitio en sí, el código para ese elemento en particular quedará resaltado en la consola. He hecho clic en el primer archivo de datos, sábado, 22 de septiembre de 2018 y la consola ha resaltado en azul el enlace a ese archivo en particular.

<a href=”data/nyct/turnstile/turnstile_180922.txt”>Sábado, 22 de septiembre de 2018</a>

Ten en cuenta que todos los archivos .txt están dentro de la etiqueta <a> que sigue a la línea anterior. A medida que hagas más web scraping, descubrirás que la etiqueta <a> se utiliza para hiperenlaces.

¡Ahora que hemos identificado la ubicación de los enlaces, comencemos con la codificación!

Código Python

Comenzamos importando las siguientes bibliotecas.

import requests

import urllib.request -> import urllib.request

import time

from bs4 import BeautifulSoup (Se mantiene igual en español)

A continuación, establecemos la URL del sitio web y accedemos al sitio con nuestra biblioteca de solicitudes.

url = 'http://web.mta.info/developers/turnstile.html'

respuesta = requests.get(url)

A continuación, analizamos el HTML con BeautifulSoup para poder trabajar con una estructura de datos de BeautifulSoup más agradable y anidada. Si está interesado en aprender más sobre esta biblioteca, consulte la documentación de BeatifulSoup.

sopa = BeautifulSoup(respuesta.texto, "analizador html")

Usamos el método .findAll para localizar todas nuestras etiquetas <a>.

soup.findAll('a') -> soup.findAll('a')

Este código nos brinda cada línea de código que tiene una etiqueta <a>. La información que nos interesa comienza en la línea 38, como se ve a continuación. Es decir, el primer archivo de texto se encuentra en la línea 38, por lo que queremos tomar el resto de los archivos de texto ubicados debajo.

one_a_tag = soup.findAll('a')[38] un_tag_a = soup.findAll('a') [38]

enlace = one_a_tag['href']

Este código guarda el primer archivo de texto, 'data/nyct/turnstile/turnstile_180922.txt', en nuestra variable link. La URL completa para descargar los datos es en realidad 'http://web.mta.info/developers/data/nyct/turnstile/turnstile_180922.txt', lo cual descubrí haciendo clic en el primer archivo de datos en el sitio web como prueba. Podemos usar nuestra biblioteca urllib.request para descargar esta ruta de archivo en nuestra computadora. Proporcionamos a request.urlretrieve dos parámetros: la URL del archivo y el nombre de archivo. Para mis archivos, los nombré "turnstile_180922.txt", "turnstile_180901", etc.

download_url = 'http://web.mta.info/developers/'+ link descarga_url = 'http://web.mta.info/developers/'+ link

urllib.request.urlretrieve(download_url, './'+link[link.find('/turnstile_')+1:]) urllib.request.urlretrieve(download_url, './'+link[link.find('/turnstile_')+1:])

Ahora que entendemos cómo descargar un archivo, intentemos descargar todo el conjunto de archivos de datos con un bucle for. 

¡Gracias por leer y feliz web scraping a todos!

Cómo hacer Web Scraping con Python en 5 minutos.
MERCURY TECHNOLOGY SOLUTION, James Huang 8 julio, 2021
Compartir
Ejecutando una sala de prensa digital.