Si tu trabajo de hoy es extraer información de las páginas de precios de los sitios web de tus competidores, ¿cómo lo lograrías? ¿Copiando y pegando? ¿Ingresando datos manualmente? ¡En realidad no! Estos métodos consumen la mayor parte de tu tiempo y pueden generar errores.
Es necesario señalar que Python se ha convertido en uno de los lenguajes de programación más populares para la extracción de datos. ¿Cuáles son sus encantos?
¡Comencemos a disfrutar del mundo del web scraping con Python!
El web scraping es un proceso de extracción de datos de sitios web. Esto puede hacerse manualmente, pero es mejor utilizar algunas herramientas automatizadas o scripts para recopilar grandes cantidades de datos de manera eficiente y precisa. Copiar y pegar desde las páginas también es, de hecho, web scraping.
Python es considerado una de las mejores opciones para el web scraping por varias razones:
Java también es un lenguaje importante para el web scraping. Puedes aprender 3 maravillosos métodos en el tutorial de Web Scraping con Java.
¿Estás listo para comenzar tu viaje en el web scraping con Python? Antes de determinar los pasos esenciales, asegúrate de saber qué esperar y cómo proceder.
El web scraping implica un proceso sistemático que comprende cuatro tareas principales:
1. Inspeccionar las Páginas Objetivo
Antes de extraer datos, necesitas entender el diseño del sitio web y la estructura de datos:
2. Recuperar el Contenido HTML
Para hacer scraping de un sitio web, primero necesitas acceder a su contenido HTML:
3. Extraer Datos del HTML
Una vez que tengas el HTML, el siguiente paso es extraer la información deseada:
4. Almacenar Datos Extraídos
Después de extraer los datos, es crucial almacenarlos en un formato accesible:
Consejo: Los sitios web son dinámicos, así que revisa y actualiza regularmente tu proceso de scraping para mantener los datos actuales.
El web scraping con Python se puede aplicar en varios escenarios, incluyendo:
El web scraping tiene su propio conjunto de desafíos:
Además, los sitios web utilizan medidas anti-bot como bloqueo de IP, desafíos de JavaScript y CAPTCHAs. Estos pueden sortearse con técnicas como proxies rotativos y navegadores headless.
¿Atascado en problemas de rastreo web?
Evita la detección anti-bot para simplificar el web scraping y la automatización
¡Prueba Nstbrowser gratis!
¿Tienes ideas y dudas interesantes sobre el web scraping y el Browserless?
¡Veamos qué comparten otros desarrolladores en Discord y Telegram!
Aunque el web scraping es versátil, existen alternativas:
A pesar de estas alternativas, el web scraping sigue siendo una opción popular debido a su flexibilidad y amplias capacidades de acceso a datos.
¡Emprende tu viaje en el web scraping con Python y desbloquea el vasto potencial de los datos en línea!
Al principio, necesitamos instalar nuestra shell:
pip install selenium requests json
Después de completar la instalación, crea un nuevo archivo scraping.py e importa la biblioteca que acabamos de instalar en el archivo:
import json
from urllib.parse import quote
from urllib.parse import urlencode
import requests
from requests.exceptions import HTTPError
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from selenium.webdriver.common.by import By
Para obtener una demostración exacta, utilizaremos Nstbrowser, un navegador totalmente gratuito con anti-detección como herramienta para completar nuestra tarea:
def create_and_connect_to_browser():
host = '127.0.0.1'
api_key = 'xxxxxxx' # tu clave de API
config = {
'once': True,
'headless': False, # sin cabeza
'autoClose': True,
'remoteDebuggingPort': 9226,
'userAgent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
'fingerprint': { # requerido
'name': 'custom browser',
'platform': 'windows', # soporte: windows, mac, linux
'kernel': 'chromium', # solo soporte: chromium
'kernelMilestone': '120',
'hardwareConcurrency': 4, # soporte: 2, 4, 8, 10, 12, 14, 16
'deviceMemory': 4, # soporte: 2, 4, 8
'proxy': '', # formato de entrada: schema://user:password@host:port ej: http://user:password@localhost:8080
}
}
query = urlencode({
'x-api-key': api_key, # requerido
'config': quote(json.dumps(config))
})
url = f'http://{host}:8848/devtool/launch?{query}'
print('devtool url: ' + url)
port = get_debugger_port(url)
debugger_address = f'{host}:{port}'
print("debugger_address: " + debugger_address)
Después de conectarse a Nstbrowser, nos conectamos a Selenium a través de la dirección del depurador que nos devolvió Nstbrowser:
def exec_selenium(debugger_address: str):
options = webdriver.ChromeOptions()
options.add_experimental_option("debuggerAddress", debugger_address)
# Reemplaza con la ruta correspondiente del controlador WebDriver.
chrome_driver_path = r'./chromedriver' # tu ruta del controlador de Chrome
service = ChromeService(executable_path=chrome_driver_path)
driver = webdriver.Chrome(service=service, options=options)
¡Desde ahora hemos iniciado correctamente Nstbrowser a través de Selenium. ¡Comienza a rastrear ahora!
driver.get("https://www.imdb.com/chart/top")
python scraping.py
Como puedes ver, hemos iniciado correctamente Nstbrowser y visitado nuestro sitio objetivo.
Podemos usar Selenium para obtener este tipo de estructura DOM y analizar su contenido:
movies = driver.find_elements(By.CSS_SELECTOR, "li.cli-parent")
for row in movies:
title = row.find_element(By.CLASS_NAME, 'ipc-title-link-wrapper') # obtener título
year = row.find_element(By.CSS_SELECTOR, 'span.cli-title-metadata-item') # obtener año de creación
rate = row.find_element(By.CLASS_NAME, 'ipc-rating-star') # obtener clasificación
move_item = {
"title": title.text,
"year": year.text,
"rate": rate.text
}
print(move_item)
Por supuesto, la salida de esta información en la terminal no es nuestro objetivo. A continuación, necesitamos guardar los datos que hemos rastreado.
Usamos la biblioteca JSON para guardar los datos recuperados en un archivo JSON:
movies = driver.find_elements(By.CSS_SELECTOR, "li.cli-parent")
movies_info = []
for row in movies:
title = row.find_element(By.CLASS_NAME, 'ipc-title-link-wrapper')
year = row.find_element(By.CSS_SELECTOR, 'span.cli-title-metadata-item')
rate = row.find_element(By.CLASS_NAME, 'ipc-rating-star')
move_item = {
"title": title.text,
"year": year.text,
"rate": rate.text
}
movies_info.append(move_item)
# crear el archivo JSON
json_file = open("movies.json", "w")
# convertir movies_info a JSON
json.dump(movies_info, json_file)
# liberar los recursos del archivo
json_file.close()
¿Cómo hacer web scraping con Python y Selenium? Este tutorial detallado cubrió todo lo que estás buscando. Para tener una comprensión completa, hablamos sobre el concepto y las ventajas de Python para el web scraping. Luego, pasamos a los pasos específicos tomando como ejemplo un navegador con anti-detección gratuito - Nstbrowser. ¡Estoy seguro de que ahora has aprendido mucho sobre el web scraping con Python! Es hora de operar tu proyecto y recopilar datos.