המטרה
למסור הורדה מלאה וחוזרת של רישום העסקים הציבורי של Washington DC DLCP — dataset שלא מוצע כייצוא bulk.
הפתרון
סקריפט CLI יחיד שקורא ישירות ל-paginationadvance-search של DLCP עם headers מדויקים (x-app-route, referer), חיפוש wildcard עם %, pagination מבוסס-token, חילוץ רשומות מינימלי, ולוגים מתויגים עם timestamps. --start-page מאפשר resume.
עיקרי הדברים
- בלי דפדפן — requests טהור מנצח Selenium ל-APIs
- Wildcard % פותח את הרישום המלא בסריקה אחת
- לוגים מתויגים הופכים tail מרחוק לטריוויאלי
האתגר
DLCP מציע את הרישום רק דרך UI של pagination — בלי CSV או כפתור download.
Reverse engineering ל-API מה-Network tab, הרצה עם requests.Session, שימוש ב-wildcard % לכל העסקים.
ה-API מחזיר 403 שקט או נתונים ריקים אם headers לא תואמים.
_build_headers() משכפל את ה-headers המדויקים של הדפדפן (x-app-route, referer, cache/pragma no-cache, content-type).
ייצוא הרישום נמתח על מאות דפים — כישלון באמצע לא צריך להתחיל מחדש.
--start-page N ממשיך מהדף האחרון שהצליח; פלט JSON זורם כך שריצה חלקית לא מתבזבזת.
מה נמסר
- washingtondc_pagination.py סקריפט יחיד
- פלט CSV לדוגמה (va-test.csv)
- מבנה run_artifacts/
תוצאות
DC DLCP registry
יעד
--start-page
Resume
Streaming JSON
פלט
מה זה לימד אותי
- ל-government registries, 'אין ייצוא bulk' היא לרוב בעיית headers/wildcard בתחפושת
- Resume ב-CLI זול יותר מ-DB של resume
- Logger מתויג שווה יותר ממה שנראה כש-tailing מרחוק
