Selenium Web Scraping - Todo lo que necesitas saber en 2024

Guías, Proxies, Python, Raspado, Mar-06-20245 minutos de lectura

La recopilación de datos es un término muy utilizado en la última década. Todas las empresas quieren conocer a fondo a sus clientes para poder desarrollar la mejor estrategia para resolver los problemas de la gente. Normalmente, las organizaciones basadas en la tecnología disponen de lagos de datos para obtener datos para su análisis. Pero, a veces, tienen que reunir los datos en línea para

La recopilación de datos es un término muy utilizado en la última década. Todas las empresas quieren conocer a fondo a sus clientes para poder desarrollar la mejor estrategia para resolver los problemas de la gente. Normalmente, las organizaciones basadas en la tecnología disponen de lagos de datos para obtener datos para su análisis. Pero, a veces, tienen que recopilar los datos en línea para diversos análisis, como el análisis de sentimientos, el análisis SEO y la monitorización. Web scraping es el método para extraer datos de una fuente específica y guardarlos en un almacenamiento local o en la nube. Python es el mejor lenguaje de programación para realizar web scraping. Hay muchas bibliotecas en Python que pueden ayudarle a raspar datos de sitios web, blogs y otras fuentes en línea. Las más famosas son BeautifulSoup y Selenium. En este artículo, veremos cómo realizar selenium web scraping.

¿Qué es el Web Scraping?

El web scraping consiste en extraer una gran cantidad de datos de varias páginas web en línea. Hoy en día, los principiantes en aprendizaje automático e IA invierten mucho tiempo en aprender diferentes formas de raspado web. El web scraping consta de dos partes: el crawler y el scraper. El crawler se encarga de encontrar y localizar los datos necesarios de la fuente de destino y, a continuación, el scraper ayuda a extraer esos datos de la fuente.

Selenio - ¿Qué es?

Selenium es una biblioteca de python gratuita y de código abierto que es un marco de pruebas automatizado utilizado principalmente para probar y validar aplicaciones web en varios navegadores. Se puede utilizar cualquier lenguaje de programación, como C#, Java y mi favorito, Python. El software Selenium es un conjunto de herramientas que consiste en:

  • Entorno de desarrollo integrado (IDE) Selenium.
  • Mando a distancia Selenio.
  • Webdriver.
  • Selenium Grid.

Veamos cómo utilizar Selenium con Python para automatizar todo el proceso de web scraping.

Planteamiento del problema:

Nuestro objetivo es recopilar los nombres y salarios de los jugadores de la NBA de la última década y, a continuación, guardar los datos en formato de marco de datos. NOTA: Para aprender y explicar cómo funciona Selenium web scraping, utilizamos el sitio web hoopshype.

Instalación del controlador de Chrome:

Antes de iniciar el proceso de web scraping, es necesario instalar el controlador de Chrome en su ordenador. El controlador de Chrome que instale dependerá de la versión del navegador Chrome que esté utilizando. Puedes comprobarlo siguiendo estos pasos:

PASO 1: Abra el navegador Chrome-> Haga clic en el icono "Hamburguesa", que está presente en la esquina superior derecha del navegador.

PASO 2: Después de hacer clic en el icono "Hamburguesa", verás la opción "Ayuda". Haz clic en "Ayuda" y selecciona "Acerca del navegador Chrome". Una vez hecho esto, aparecerá la página de la versión. La imagen de abajo representa la página de versión de Google Chrome.

Ventana de versión de Google Chrome

Nota: Si tiene alguna actualización, es mejor instalarla antes de instalar el controlador de Chrome.

Una vez que averigüe la versión, vaya al sitio web del controlador de Chrome y descargue el controlador en función de la versión de Chrome que tenga.

Instale Selenium:

La forma más sencilla de instalar el paquete selenium es a través de PIP (Package Installer Python). Puedes abrir cualquier bloc de notas, ya sea Juypter o Google Collab, y escribir el siguiente código python:

pip install selenium

El comando anterior descarga todos los paquetes de dependencia para Selenium. Ahora, vamos a ver cómo implementar web scraping con Selenium.

Web Scraping con Selenium:

Recomendamos crear un entorno virtual e implementar el proceso de web scraping para una mejor práctica. Vamos a utilizar el cuaderno Juypter para hacer web scraping en este ejemplo.

PASO 1: Importar todas las librerías necesarias. Pandas y Selenium webdriver son las principales librerías para el web scraping simple. A continuación se muestra el código python para importar todas las librerías necesarias:

from selenium import webdriver
from selenium.webdriver.common.keys import claves
import pandas as pd

PASO 2: Una vez importadas las librerías, el siguiente paso es iniciar el driver de Chrome. A continuación se muestra el código python para iniciar el controlador

driver = webdriver.Chrome(r"\Selenium\chromedriver.exe")

NOTA: En el argumento, mencione la ruta completa de la ubicación del controlador de Chrome en su sistema local.

PASO 3: Una vez que inicies el controlador, el navegador Chrome debería abrirse en una nueva ventana. Pero la ventana debe estar vacía ya que no hay ninguna URL de alimentación. El código python para la URL del feed de destino se muestra a continuación:

seed_url = 'https://hoopshype.com/salaries/players/'
driver.get(dirección_semilla)

PASO 4: Una vez introducida la URL del feed, en la nueva ventana, deberías poder ver el sitio web de destino. El siguiente proceso es encontrar el nombre de cada jugador de la NBA. En Selenium, puedes encontrar los elementos HTML por los siguientes métodos:

  • ID
  • Selector CSS
  • Selector XPATH
  • Nombre
  • Nombre de la clase
  • Nombre de la etiqueta

En nuestro ejemplo, vamos a ver cómo detectar los elementos utilizando el selector XPATH. Queremos extraer dos detalles de estos datos:

  • Nombre del jugador
  • Salario

Nota: También es posible utilizar el formulario de búsqueda para encontrar elementos web. El formulario de búsqueda se encuentra en la parte inferior de la página Inspeccionar.

PASO 5: Cuando aterrice en la página de destino, debería ver una lista de jugadores y sus salarios para las temporadas (año). Selecciona uno de los nombres de los jugadores y haz clic con el botón derecho del ratón. Te aparecerán varias opciones. En esas opciones, haga clic en "Inspeccionar". La imagen de abajo representa la página Inspeccionar.

Inspeccionar la página de destino

Ahora, como ya se ha dicho, el objetivo es extraer los nombres de los jugadores. Por lo tanto, el primer paso es encontrar un elemento de un solo jugador y el factor común entre todos los elementos de jugador. Así que, en el mismo proceso, haz clic con el botón derecho en el nombre del jugador e inspecciónalo. Esto debería llevarte directamente a la localización de tu elemento. En lugar de tomar el nombre de un jugador en nuestro escenario, estamos tomando los nombres de todos los jugadores. El elemento común entre todos los jugadores es "td class-'name'". Por lo tanto, si utilizamos este elemento y hacemos un bucle con él, obtendremos los nombres de todos los jugadores. El código python para extraer el nombre de un jugador se muestra a continuación:

nba_players = driver.find_elements_by_xpath('//td[@class="nombre"]')
lista_jugadores = []
for p in range(len(nba_players)):
    players_list.append(nba_players[p].text)
imprimir(lista_jugadores)

Explicación: Como se mencionó anteriormente, estamos encontrando el elemento de código HTML utilizando el enfoque XPATH. Obviamente, necesitamos la ruta XPATH de múltiples elementos. La forma más fácil es encontrar el elemento nombre, que es "td nombre-clase". Haga clic derecho sobre el elemento y seleccione "Copiar". Deberías obtener muchas opciones, como copiar ruta JS y copiar XPATH. Seleccione copiar XPATH, y usted debe obtener automáticamente la ubicación XPATH del elemento. Pega la ruta en el argumento find_elements_by_XPATH. Una vez pegada la ruta, Python debería empezar a identificar estos elementos y obtener sus direcciones, no el nombre real. Para obtener los nombres reales de los jugadores, vamos a hacer un bucle con la función y anexar los resultados a una lista vacía como salida. Una vez que ejecute el fragmento de código anterior, debe obtener la salida como se muestra en la imagen siguiente.

Salida para extraer el nombre de los jugadores

Ahora que tenemos los nombres de los jugadores, el siguiente paso es obtener sus respectivos salarios. El proceso exacto de extracción del nombre se lleva a cabo para obtener los detalles salariales.

PASO 6: Los datos salariales se extraen utilizando el código python como se muestra a continuación:

salario_jugadores=driver.find_elements_by_xpath('//td[@class="hh-salarios-ordenados"]')
lista_salarios=[]
for s in range(len(salario_jugadores)):
    salary_list.append(salario_jugadores[s].texto)
imprimir(lista_salarios)

Explicación: El proceso es el mismo. La única diferencia es el elemento común entre los jugadores. El elemento común es el elemento web "td class-'hh-salaries-sorted'". Después de encontrar el elemento, creamos una lista vacía para hacer un bucle con toda la función y añadimos los detalles salariales a la lista vacía. El resultado debería parecerse a la imagen que se muestra a continuación:

Salida para extraer el salario de los jugadores

PASO 7: Ahora hemos extraído los datos de nuestro objetivo. Pero, si nos fijamos bien, los datos sólo corresponden a una temporada (el año en curso). Nuestro problema es extraer los datos de la última década. Aquí es donde la automatización del navegador entra en escena. No hay de qué preocuparse. Podemos utilizar el mismo código para la temporada que la función de bucle. El código python para automatizar el proceso de scraping y obtener los datos de la última década se muestra a continuación:

para i en rango(2010,2021):
    número_página = str(i) + '-' + str(i+1) +'/'
    feed_url = 'https://hoopshype.com/salaries/players/' + número_página
    driver.get(feed_url)
    
    jugadores = driver.find_elements_by_xpath('//td[@class="nombre"]')
    salarios = driver.find_elements_by_xpath('//td[@class="hh-salarios-ordenados"]') 
    
    jugador = []
   for j in range(len(players)):
        player.append(jugadores[j].texto)
    
    salario = [ ]
   for k in range(len(salarios)):
        salario.append(salarios[k].texto)

Explicación: Como se ha mencionado anteriormente, nuestro objetivo es obtener los datos de los últimos diez años. Para ello, tenemos que aplicar la paginación. La paginación es el proceso de añadir números consecutivos, normalmente números de página, para identificar la secuencia de orden de la página. Las temporadas se representan en el formato AAAA/MM. Para reconocerlo, utilizamos la técnica de concatenación. Después, utilizamos el mismo proceso y el mismo código dentro del bucle.

PASO 8: El último paso es guardar los datos en el marco de datos para diversos análisis, como el análisis de sentimiento y análisis de la competencia. El código python para guardar los datos en el marco de datos se muestra a continuación:

df = pd.DataFrame(columns=['Jugador','Salario','Año'])
data = list(zip(jugador[1:],salario[1:])) 
df1 = pd.DataFrame(datos, columnas=['Jugador','Salario']) 
df1['Año'] = i
df = df.append(df1)

NOTA: En la segunda línea del código, se puede ver que hice slicing. La razón de esto fue que cuando ves la salida de los nombres de los jugadores y los salarios, el primer índice, es decir, el índice 0, fue el "JUGADOR" y "FECHA". Estos elementos no aportan mucha importancia a la tabla. Por lo tanto, podemos eliminar esos elementos.

Explicación: Creamos un marco vacío con "Jugador", "Salario" y "Año" como columnas. Acumulamos todos los datos en una sola lista con la función Zip para anexar la lista al marco de datos. Una vez añadidos los datos al marco de datos, es el momento de finalizar la automatización y cerrar el controlador. Si es necesario, puede guardar el marco de datos en un archivo CSV para un repositorio de datos.

Ya está. Has realizado con éxito la automatización y el web scraping utilizando Selenium y Python.

Preguntas frecuentes:

1. ¿Es Selenium adecuado para el web scraping?
Sí, si usted está planeando raspar páginas web dinámicas, que utilizan JavaScript. Pero, también es una buena opción para Python. Selenium es un buen punto de partida para principiantes interesados en web scraping.
2. ¿Qué es mejor, BeautifulSoup o Selenium?
Esta respuesta se basa en el tipo de página web de destino y la escala de su proyecto. Si usted está buscando para raspar una página estática pequeña y bien estructurada, entonces BeautifulSoup es mejor. Si su proyecto implica complejas páginas web dinámicas estructuradas, selenio raspado web puede ser la mejor opción.
3. ¿Cuáles son las mejores herramientas para el web scraping?
Python es la mejor y más favorable herramienta para realizar web scraping. Las bibliotecas de Python, como BeautifulSoup, Selenium y Request, así como otras herramientas, como Scrapy, son las mejores herramientas para el web scraping.

Conclusión:

Este artículo muestra cómo instalar un controlador de Chrome en tu sistema local para automatizar un pequeño proceso de web scraping. En tiempo real, manejar una gran cantidad de datos (en términos de tamaño, como MB, GB, y a veces TB) implica pasos complejos. Selenium es un buen comienzo para los principiantes interesados en la recopilación de datos, el proceso de screen scraping y la ciencia de datos en general. Como se ha mencionado, un proceso complejo de web scraping requiere mucho tiempo para recopilar los datos. La mayoría de los sitios web no permiten el web scraping durante un período prolongado; una vez alcanzado ese umbral, el sitio web probablemente bloqueará su dirección IP y detendrá su proceso de web scraping. Para evitar estas dificultades, se recomienda utilizar un proxy. ProxyScrape proporciona excelentes proxies residenciales que son los más adecuados para tareas de alta demanda, como el web scraping.

DESCARGO DE RESPONSABILIDAD: Este artículo tiene fines estrictamente didácticos. Sin seguir las directrices adecuadas, realizar web scraping puede ser ilegal. Este artículo no apoya de ninguna forma el web scraping ilícito.