feat: trip.com Scanner hinzufügen (Premium Economy, gut für Asia-IPs)

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Cursor 2026-02-25 14:28:22 +07:00
parent 5b5cf38bd6
commit d4a94465b7

View file

@ -8,6 +8,7 @@ def scrape(scanner, von, nach, tage=30):
"google_flights": scrape_google_flights,
"kayak": scrape_kayak,
"skyscanner": scrape_skyscanner,
"trip": scrape_trip,
}
fn = dispatcher.get(scanner)
if not fn:
@ -187,3 +188,65 @@ def scrape_skyscanner(von, nach, tage=30):
"""Skyscanner hat starken Bot-Schutz — für jetzt übersprungen."""
print("[SS] Skyscanner übersprungen (Bot-Detection)")
return []
def scrape_trip(von, nach, tage=30):
"""trip.com — gut von Asia-IPs, oft günstigere Asien-Preise."""
abflug = (datetime.now() + timedelta(days=tage)).strftime("%Y%m%d")
abflug_iso = (datetime.now() + timedelta(days=tage)).strftime("%Y-%m-%d")
# W = Premium Economy bei trip.com
url = (f"https://www.trip.com/flights/{von.lower()}-to-{nach.lower()}/"
f"tickets-{von.lower()}-{nach.lower()}/"
f"?DDate1={abflug}&class=W&curr=EUR")
log = []
results = []
with SB(uc=True, headless=True, chromium_arg="--no-sandbox --disable-dev-shm-usage") as sb:
sb.open(url)
sb.sleep(12)
title = sb.get_title()
body = sb.get_text("body")
log.append(f"[TR] title={title[:60]}")
log.append(f"[TR] body-länge={len(body)}")
# Cookie-Banner
for sel in ['button[id*="accept"]', 'button[class*="accept"]',
'button[aria-label*="Accept"]', '.cookie-accept']:
try:
sb.click(sel, timeout=2)
sb.sleep(2)
break
except Exception:
pass
# CSS-Selektoren trip.com
for sel in ['.price-box .price', '.flight-price', 'span[class*="price"]',
'div[class*="price-num"]', '.price-content span', 'em[class*="price"]']:
try:
elems = sb.find_elements(sel, timeout=2)
if elems:
log.append(f"[TR] Selector '{sel}': {len(elems)} Elemente")
for e in elems[:10]:
p = _parse_preis(e.text)
if p:
results.append({
"scanner": "trip", "preis": p,
"waehrung": "EUR", "airline": "",
"abflug": abflug_iso, "ankunft": ""
})
if results:
break
except Exception:
pass
# Fallback Regex
if not results:
results = _preise_aus_body(body, "trip", abflug_iso)
log.append(f"[TR] Regex-Fallback: {len(results)} Preise")
log.append(f"[TR] Ergebnis: {[r['preis'] for r in results]}")
print('\n'.join(log))
return results[:10]