Automatiza tu web scraping con Perplexity y DeepSeek en Python
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
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?


