המטרה
להוריד את כל הקטלוג של KSP.co.il (מהקמעונאים הגדולים בישראל) ל-JSON + CSV למעקב מחירים וניתוח, דרך הגנת TLS fingerprinting ועץ קטגוריות עמוק.
הפתרון
סקריפט Python יחיד (fetch_ksp_all.py) שמשכפל את ה-SSE endpoint של KSP דרך curl_cffi (impersonation של Chrome), עובר דף-דף ב-50 דרך category path של 15 רמות, וכותב גם ksp_all_items.json וגם CSV ידידותי ל-Excel. ksp_to_csv.py post-processor ממיר JSON בלי re-scraping.
עיקרי הדברים
- curl_cffi impersonation אמין דרמטית מ-header juggling כש-TLS fingerprinting פעיל
- פלט כפול JSON + CSV ידידותי ל-Excel הופך ניתוח לפשוט
- Capture של הדפדפן (test_ksp.js) הוא הדרך המהירה לעשות diff כשהאתר משתנה
האתגר
requests.get(...) מחזיר ריק/חסום כי KSP עם TLS fingerprinting.
curl_cffi עם impersonation של chrome + headers מדויקים מה-DevTools.
ה-endpoint של KSP משדר text/event-stream chunks; פירוש JSON נאיבי נכשל.
accept: text/event-stream, צבירת chunks, פירוש ה-stream המשולב בסוף כל דף.
Category path של 15 רמות שביר — טעות = ריק.
שרשרת מדויקת מה-Network tab, hard-coded כ-CATEGORY — שינוי = קבוע אחד.
Excel פותח UTF-8 CSVs לא עקבי עם עברית.
CSV writer עם UTF-8 BOM מפורש — Excel מזהה עברית בפתיחה.
מה נמסר
- fetch_ksp_all.py סקרייפר ראשי
- ksp_to_csv.py post-processor
- test_ksp.{py,js,json,csv} — reference capture מהדפדפן
- requirements.txt
תוצאות
50
גודל דף
JSON + CSV (UTF-8 BOM)
פלטים
KSP.co.il full catalog
יעד
מה זה לימד אותי
- curl_cffi impersonation אמין דרמטית מ-headers ידני כש-TLS fingerprinting
- תמיד UTF-8-BOM ב-CSV כשדאטה בעברית הולך ל-Excel
- test_{site}.js capture לצד הסקרייפר — ה-diff הראשון כשהאתר משתנה
