המטרה
קרסון מייצר לידים מהודעות probate/foreclosure/sheriff-sale/tax-sale ברחבי PA. כל מחוז עם פורטל שונה. המטרה: חבילת סקרייפרים יחידה שממפה 10+ פורטלים לצינור אחד עם העשרת BatchData, אחסון SQLite ופלט Google Sheets.
הפתרון
Framework רב-פורטלי: config.py עם מיפוי keywords-to-category, רשימת מחוזות, אישורי proxy/captcha/ZenRows/BatchData. scrapers/ עם מודול לכל פורטל (civil_core.py + public_notice.py + trackers per-county עם גרסאות with/without-proxy). run_test.py להרצת subset. SQLite + Google Sheets export.
עיקרי הדברים
- 10+ פורטלים מאוחדים תחת סכמת lead אחת
- Config של keyword→category מנצח ML לגודל הזה
- גרסאות with/without-proxy מאלפות פורטלים שבריריים
- העשרת BatchData הופכת לידים ל-actionable לפני ה-sheet
האתגר
10 פורטלים שונים עם layout, טפסי חיפוש ו-pagination שונים.
civil_core.py מיישם את workflow המשותף; מודולים per-county מרחיבים. public_notice.py נפרד. הכל מתנרמל לסכמה אחת לפני SQLite.
הודעות כטקסט חופשי; אותה הודעה יכולה להיות probate/foreclosure/tax לפי ביטוי בגוף.
PUBLIC_NOTICE_KEYWORDS ב-config.py ממפה ביטויים לקטגוריות; הוספה = config, לא קוד.
חלק מהפורטלים עובדים על residential proxies, חלק דוחים.
שתי גרסאות לכל פורטל — with_proxy / without_proxy — כל אחת מכוונת למסלול שלה; המפעיל בוחר per-county.
שם+כתובת מהודעת בית משפט לא פעולים — צריך בעל, טלפון, מטא-דאטה.
אינטגרציית BatchData API מעשירה כל ליד לפני SQLite, כך ש-Sheets מוכן לשימוש מיד.
חלק מהפורטלים עם CAPTCHA; אחרים מגישים HTML שונה ל-residential IPs.
2Captcha + ZenRows רנדור residential כ-fallbacks.
מה נמסר
- חבילת scrapers/ (civil_core.py, public_notice.py, trackers per-county)
- config.py מרכזי
- run_test.py
- SQLite + Google Sheets export
- אינטגרציות BatchData + 2Captcha + ZenRows + BrightData
- גרסאות with/without-proxy
- requirements.txt
תוצאות
10+
פורטלים
Resumable
עמידות
4 (probate/foreclosure/sheriff/tax)
קטגוריות
BatchData
העשרה
מה זה לימד אותי
- Config של keyword→category זו השכבת סיווג הזולה והמתוחזקת ביותר לגודל הזה
- גרסאות with/without-proxy הופכות 'שובר לפעמים' ל-'הפוך דגל'
- SQLite source-of-truth + Sheets export נפרד שומרים על תצוגה אנליסטית מנותקת
