למה TheWorker הוא לא עוד אתר WordPress
הטעות הראשונה שאני רואה שוב ושוב היא התייחסות ל-TheWorker כאילו הוא אתר תוכן סטטי. פתחו את ה-DevTools ותראו את האמת: זו Single Page Application (SPA) כנראה מבוססת React או Vue. מה זה אומר בפועל? שה-HTML הראשוני שאתם מקבלים מהשרת הוא כמעט ריק. הוא מכיל בעיקר תגי <script> שקוראים לקוד JavaScript, שאחראי על שליפת הנתונים מ-API פנימי ורינדור התוכן בדפדפן.
אם תריצו ספרייה פשוטה כמו aiohttp או requests, כל מה שתקבלו זה את השלד הזה. לא תראו שמות משרות, לא טווחי שכר, לא כלום. הנתונים פשוט לא שם. זו הסיבה שכל ניסיון לעשות איסוף קטלוג TheWorker עם כלים בסיסיים נידון לכישלון. אתם חייבים להריץ את ה-JavaScript, וזה אומר שאתם צריכים דפדפן. לא חיקוי של דפדפן, לא סתם user-agent מזויף — דפדפן אמיתי, headless. זה משנה את כל ארכיטקטורת הפרויקט. אתם עוברים מעולם של בקשות HTTP פשוטות לעולם של אוטומציה מורכבת בדפדפן, עם כל מה שמשתמע מכך: ניהול זיכרון, זמני ריצה ארוכים יותר פר דף, והתמודדות עם מנגנוני זיהוי בוטים שרצים בצד הלקוח.
בניית ה-Stack: למה Playwright מנצח את Selenium
אז החלטנו שאנחנו צריכים דפדפן. במשך שנים, הבחירה הברורה הייתה Selenium. אבל ב-2025, אם אתם מתחילים פרויקט חדש, תפסיקו עם Selenium. Playwright מנצח אותו בכל מדד שחשוב ל-scraping. הוא מהיר יותר, ה-API שלו מודרני יותר ותומך ב-async/await בצורה טבעית, והוא מגיע עם יכולות מובנות שהיו דורשות תוספים מסורבלים ב-Selenium.
בפרויקט scraping TheWorker, היכולת לחכות לאלמנטים ספציפיים או לבקשות רשת מסוימות (למשל, ה-API שמאכלס את רשימת המשרות) היא קריטית. ה-Auto-waits של Playwright הופכים את זה לפשוט ואמין, ומפחיתים דרמטית את כמות ה-flaky tests והריצות הכושלות. יותר מזה, קהילת ה-stealth סביב Playwright (ו-Puppeteer) פעילה בהרבה. המשמעות היא שיש לכם גישה לכלים כמו מדריך Playwright stealth שעוזרים להסוות את העובדה שאתם מריצים דפדפן אוטומטי, מה שמקשה על מערכות כמו Cloudflare Bot Management לזהות אתכם. עם Playwright מוגדר נכון, אפשר להגיע לקצב של 40-50 דפים במקביל על מכונה סטנדרטית, משימה כמעט בלתי אפשרית לייצוב עם Selenium WebDriver.
Proxy Rotation וטביעת אצבע: המלחמה על ה-Session
הגעתם ללב העניין. גם עם ה-stack הכי טוב, אם תשלחו 500 בקשות מה-IP של השרת שלכם, תיחסמו. TheWorker, כמו כל אתר בסדר גודל כזה, מנטר התנהגות חשודה. הפתרון הוא proxies, אבל לא כל פרוקסי יעבוד.
תשכחו מ-datacenter proxies. הם זולים, אבל ה-IP ranges שלהם ידועים ורובם כבר מסומנים. בפרויקט דומה, ראינו שיעור חסימות של 95% אחרי 200 בקשות בלבד עם פרוקסים כאלה. אתם צריכים residential proxies. אלה כתובות IP של משתמשים אמיתיים, מה שהופך אתכם להרבה יותר קשים לזיהוי. אבל גם זה לא מספיק. צריך לעשות rotation חכם. אל תחליפו IP על כל בקשה – זה דפוס התנהגות של בוט. החזיקו session עם אותו IP למספר דפים (למשל, חיפוש, מעבר לדף תוצאות, כניסה ל-3-4 מודעות) ורק אז תחליפו. זה מדמה התנהגות אנושית. בנוסף, TheWorker בודק טביעות אצבע של הדפדפן (fingerprinting). דברים כמו JA3, סדר ה-headers, והתנהגות ה-JavaScript Canvas. שימוש ב-Playwright עם תוספי stealth עוזר, אבל איך לבחור פרוקסי residential איכותי שמתאים לטכניקות האלה הוא קריטי. בלי זה, אתם פשוט שורפים מאמץ וזמן.
התרחיש שבו אתם נכשלים: ניטור אגרסיבי של נתוני שכר
בואו נדבר על failure scenario ספציפי ל-TheWorker. אתם רוצים לבנות שירות ניטור מחירים TheWorker (כלומר, ניטור שינויי שכר במשרות). זהו אחד ה-use cases הכי רגישים. סביר להניח שהדפים המציגים נתוני שכר מפורטים מוגנים יותר מדפי רשימות כלליים. אולי יש עליהם CAPTCHA, או שהם דורשים אינטראקציה מורכבת יותר.
הטעות הקלאסית היא לנסות לעשות scrape לקטגוריית "מפתחי תוכנה" עם 5,000 משרות בקצב של 10 בקשות בשנייה דרך אותו בלוק של פרוקסים. המערכת תזהה אתכם מיד. הדפוס ברור: גישה מהירה לדפים בעלי ערך גבוה מדפוס IP מצומצם. התוצאה? לא רק שה-IPs ייחסמו, אלא טביעת האצבע של הדפדפן שלכם תסומן. מהר מאוד תתחילו לקבל שגיאות 429 או דפי CAPTCHA בכל מקום. הפתרון הוא להאט. עבור דפים רגישים, רדו לקצב של בקשה כל 5-10 שניות פר IP, השתמשו ב-pool רחב יותר של פרוקסים, והוסיפו "רעש" אקראי כמו תנועות עכבר והמתנות בין פעולות. זה מסבך את הלוגיקה, אבל זה ההבדל בין פרויקט שעובד חודש ופרויקט שנופל אחרי שעה.
מתי גישה מבוססת-דפדפן היא Overkill
אחרי כל מה שאמרתי על Playwright, יש מצבים שבהם הוא פשוט בזבוז משאבים. לפני שאתם בונים מערך שלם של דפדפסי headless, הקדישו כמה שעות לחקור את בקשות הרשת ב-DevTools. הרבה פעמים, במיוחד באפליקציות מובייל או בפיצ'רים מסוימים באתר, תמצאו קריאות API ישירות שמחזירות JSON נקי.
למשל, אם המטרה שלכם היא רק לאסוף את רשימת שמות מוצרים/מודעות וקטגוריות ראשיות, ייתכן שיש endpoint פשוט כמו api.theworker.co.il/v2/jobs?category=dev שמחזיר את כל מה שאתם צריכים. עבודה עם API כזה היא עולם אחר: היא מהירה פי 100, צורכת עשירית מהמשאבים, והרבה יותר יציבה. המאמץ עובר מניהול דפדפנים ופרוקסים להנדסה לאחור של ה-API. צריך להבין איזה headers נדרשים, איך עובד ה-authentication (אם קיים), ואיך לטפל ב-pagination. זה מאמץ ראשוני גדול יותר, אבל התחזוקה השוטפת קלה לאין שיעור. זהו המפתח ליצירת API / קובץ נתונים TheWorker יעיל. אל תניחו שאתם חייבים דפדפן, תמיד תבדקו אם יש דרך קלה יותר.
