Saltar al contenido
K0lateral
Programación

Automatiza tu web scraping con Perplexity y DeepSeek en Python

· (banco local)

Aprende a extraer datos web sin selectores CSS ni XPath. Usa Perplexity y DeepSeek para scraping inteligente con Python.

Automatiza tu web scraping con Perplexity y DeepSeek en Python
(banco local)

Automatiza tu web scraping con Perplexity y DeepSeek en Python

Mira, colega, si estás hasta el gorro de perder horas escribiendo selectores CSS o XPath que se rompen cada vez que una web cambia de diseño, te traigo la solución. Perplexity y DeepSeek pueden hacer el trabajo sucio por ti. Te explico cómo usar ambas IAs para extraer datos estructurados sin tocar un selector.

¿Por qué usar IAs para scraping?

Tío, el scraping tradicional es un coñazo: identificas elementos, pruebas selectores, lidias con JavaScript, y al final la web se actualiza y todo se va al carajo. Con Perplexity y DeepSeek, le pasas el HTML o la URL y te devuelven los datos como quieras: JSON, tablas, listas... todo sin romperte la cabeza.

Setup básico

Instala lo justo y necesario:

pip install requests beautifulsoup4 openai

Prompt 1: Extraer productos con Perplexity

Este prompt te saca productos de cualquier tienda online. Perplexity analiza la URL y te devuelve datos estructurados:

import requests

url = "https://ejemplo-tienda.com/productos"

prompt = f"""

Extrae los siguientes datos de {url}:

  • Nombre del producto
  • Precio
  • Disponibilidad (en stock o agotado)
  • URL de la imagen

Devuélvelo como lista JSON. Si no hay datos, devuelve [].

No inventes nada, solo lo que veas en la página.

"""

Aquí usarías la API de Perplexity (necesitas API key)

response = requests.post(

"https://api.perplexity.ai/chat/completions",

headers={"Authorization": "Bearer TU_API_KEY"},

json={"model": "sonar-pro", "messages": [{"role": "user", "content": prompt}]}

)

print(response.json()["choices"][0]["message"]["content"])

Prompt 2: Scraping de tablas con DeepSeek

DeepSeek es un máquina para tablas. Este prompt te extrae cualquier tabla HTML directamente a pandas:

import requests

from bs4 import BeautifulSoup

Capturamos el HTML de la página

url = "https://ejemplo.com/tabla-precios"

html = requests.get(url).text

prompt = f"""

Analiza este HTML y extrae la tabla de datos que encuentres.

Devuelve los datos en formato CSV con cabeceras.

HTML:

{html[:5000]} # Limitamos para no saturar

"""

DeepSeek API

response = requests.post(

"https://api.deepseek.com/v1/chat/completions",

headers={"Authorization": "Bearer TU_API_KEY_DEEPSEEK"},

json={

"model": "deepseek-chat",

"messages": [{"role": "user", "content": prompt}]

}

)

csv_data = response.json()["choices"][0]["message"]["content"]

print(csv_data)

Prompt 3: Extraer noticias con estructura personalizada

¿Necesitas título, fecha, autor y resumen de artículos? Este prompt te lo da todo masticado:

url_noticia = "https://ejemplo-noticias.com/articulo-1"

prompt = f"""

Analiza el contenido de {url_noticia} y extrae:

  • Titulo
  • Fecha de publicacion (formato YYYY-MM-DD)
  • Autor
  • Resumen (max 2 frases)
  • Categoria

Devuelve un objeto JSON válido. Si algún campo no existe, pon null.

No añadas texto extra, solo el JSON.

"""

Usa Perplexity o DeepSeek, el prompt funciona con ambos

Ejemplo con DeepSeek:

response = requests.post(

"https://api.deepseek.com/v1/chat/completions",

headers={"Authorization": "Bearer TU_API_KEY_DEEPSEEK"},

json={

"model": "deepseek-chat",

"messages": [{"role": "user", "content": prompt}]

}

)

print(response.json()["choices"][0]["message"]["content"])

Prompt 4: Scraping dinámico con manejo de errores

Cuando las webs tienen JavaScript o son inestables, este prompt incluye reintentos:

import time

def scrape_con_ia(url, max_intentos=3):

prompt = f"""

Extrae de {url} los siguientes datos:

  • Nombre de la empresa
  • Email de contacto
  • Teléfono
  • Dirección

Devuelve un JSON con esos campos. Si no encuentras algún campo, pon null.

Si la página no carga o está bloqueada, devuelve {{"error": "no_data"}}.

"""

for intento in range(max_intentos):

try:

response = requests.post(

"https://api.perplexity.ai/chat/completions",

headers={"Authorization": "Bearer TU_API_KEY"},

json={

"model": "sonar-pro",

"messages": [{"role": "user", "content": prompt}],

"temperature": 0.1 # Bajo para ser preciso

},

timeout=30

)

return response.json()["choices"][0]["message"]["content"]

except Exception as e:

print(f"Intento {intento+1} falló: {e}")

time.sleep(2)

return '{"error": "fallo_total"}'

print(scrape_con_ia("https://ejemplo-empresa.com/contacto"))

Consejos de colega

Tío, algunas cosas que he aprendido:

  • Las IAs alucinan, así que siempre valida los datos que devuelven
  • Limita el HTML que envías a unos 5000 caracteres para no pagar de más
  • Si la web tiene mucho JS, mejor usa Selenium + IA para capturar el HTML renderizado
  • Perplexity va mejor para webs con contenido semántico, DeepSeek para tablas y datos estructurados

Y tú, ¿qué usas para scrapear cuando los selectores clásicos te fallan? ¿Ya has probado este enfoque con IAs?

Más sobre Programación

Ver todo →