763e06c127
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5.2 KiB
5.2 KiB
name, kind, lang, domain, version, purity, signature, description, tags, uses_functions, uses_types, returns, returns_optional, error_type, imports, params, output, tested, tests, test_file_path, file_path
| name | kind | lang | domain | version | purity | signature | description | tags | uses_functions | uses_types | returns | returns_optional | error_type | imports | params | output | tested | tests | test_file_path | file_path | |||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| scrape_aliexpress_cdp | function | py | browser | 1.0.0 | impure | def scrape_aliexpress_cdp(query: str, sort: str = 'total_tranpro_desc', limit: int = 40, port: int = 9222, timeout_s: float = 25.0) -> dict | Scrapea productos de AliExpress por Chrome DevTools Protocol (CDP) sobre el navegador diario logueado (chromium-personal, puerto 9222, IP residencial), evitando el captcha que bloquea el scraper HTTP. Capta coste en China (EUR) y numero de pedidos (demanda real) como senal de dropshipping: que importar de China. Ordena por defecto por numero de pedidos. |
|
|
false | error_py_core |
|
|
dict autosuficiente {status: 'ok'|'error'|'captcha', source:'aliexpress', query, url, count, products:[...]}. Cada product: item_id(str), url(str), title(str), price(float EUR|None), price_orig(float|None), rating(float|None), orders(str crudo p.ej. '10.000+ vendidos'|None), orders_num(int aprox), ship_from(str|None), scraped_at(iso). Nunca inventa datos: sin cards -> status='error' products=[]; captcha -> status='captcha' products=[]. Nunca lanza. | false | python/functions/browser/scrape_aliexpress_cdp.py |
Ejemplo
# Requiere chromium-personal con remote debugging en 9222 y sesion logueada.
cd "$HOME/fn_registry"
python/.venv/bin/python3 python/functions/browser/scrape_aliexpress_cdp.py "organizador maletero coche" "total_tranpro_desc" 40
import sys, os
sys.path.insert(0, os.path.join("python", "functions"))
from browser.scrape_aliexpress_cdp import scrape_aliexpress_cdp
res = scrape_aliexpress_cdp("organizador maletero coche", sort="total_tranpro_desc", limit=40)
print(res["status"], res["count"])
for p in res["products"][:3]:
print(p["price"], "EUR -", p["orders_num"], "pedidos -", p["title"][:50])
# ok 7
# 14.49 EUR - 10000 pedidos - Caja organizadora de maletero de coche, gran capac...
# 56.87 EUR - 5000 pedidos - YZ para Tesla Model Y Juniper 2021-2026, caja de al...
Cuando usarla
Cuando necesites el coste en China + la demanda (numero de pedidos) de un producto
para decidir que importar (market intelligence de dropshipping, proyecto
captacion_clientes). Usala en lugar de scrape_aliexpress_trending_py_datascience
cuando ese scraper HTTP devuelva captcha: esta via opera el navegador diario logueado
con IP residencial y no dispara el muro anti-bot. La persistencia (DuckDB/Postgres/Excel)
la hace un componente aparte: el dict de salida es autosuficiente y no casa con ninguna tabla.
Gotchas
- Impura, depende del navegador diario: requiere
chromium-personalcorriendo con--remote-debugging-port=9222y la sesion de AliExpress logueada (IP residencial). Sin CDP vivo,cdp_evaldevuelveok=Falsey la funcion retornastatus='error'. - Pisa la pestana activa de AliExpress: navega via
location.hrefsobre el primer targetpagecuya URL contenga "aliexpress" (o el primer page si no hay). Si tienes una pestana de AliExpress con trabajo en curso, la reemplaza. - Volumen real bajo por pagina: la galeria
/w/wholesale-...suele exponer solo ~7-12 cards reales (el resto son banners promocionales "GRATIScon una compra" sin precio, que se descartan).countreflejara los productos reales disponibles en la pagina, no siempre llegara alimit. Para mas volumen hay que paginar (&page=2), fuera del alcance de esta funcion. - Fragil ante cambios de HTML de AliExpress: depende del selector
.search-item-card-wrapper-galleryy del formato del texto de la card (14,49€32,2€ -55%4.610.000+ vendidos). Si AliExpress cambia el markup, la extraccion devolvera campos None ostatus='error'(no inventa datos). - Lee
textContent, noinnerText: las cards fuera del viewport devuelveninnerTextvacio; por eso se usatextContentnormalizado. El texto viene pegado sin saltos de linea y los regex no dependen de\n. - Captcha posible: si AliExpress muestra el slider "nc" / punish page, la funcion lo
detecta y devuelve
status='captcha'sin intentar resolverlo. Reaccion correcta: handoff humano (activar la pestana y resolver a mano). orders_numes aproximado:'10.000+'-> 10000,'5.000+'-> 5000,'1.234'-> 1234 (quita puntos de millar y el+). El+significa "al menos ese numero".