IMPORTHTML ו-IMPORTXML פותרים מקרים פשוטים ונשברים באתרים מודרניים. למה זה קורה, מה Apps Script מוסיף, ומתי גיליון מפסיק להיות המקום הנכון.
עיקרי הדברים
- הפונקציות המובנות מושכות HTML גולמי - הן אינן מריצות JavaScript.
- לכן אתר שמרכיב את התוכן בדפדפן יחזיר תא ריק או שגיאה, גם כשהעין רואה טבלה.
- Apps Script מרחיב את הטווח אבל אינו פותר רינדור או אתגרים אנושיים.
- גיליון הוא יעד מצוין ובסיס נתונים גרוע - ההבחנה הזו קובעת מתי לעבור.
- ריבוי נוסחאות חיות בגיליון אחד הוא סיבה מרכזית לאיטיות ולערכים שנעלמים.
Google Sheets מציע פונקציות שמביאות נתונים מדף אינטרנט בלי שורת קוד, והן עובדות מצוין למקרה צר: טבלה גלויה ב-HTML סטטי. הן נשברות באתרים מודרניים מסיבה אחת ברורה, ושווה להבין אותה לפני שמאשימים את הנוסחה.
הפונקציות המובנות ומה כל אחת עושה
| הפונקציה | מתאימה ל | הגבלה עיקרית |
|---|---|---|
IMPORTHTML | טבלה או רשימה מסומנת בדף | חייבת להיות <table> או <ul> אמיתיים |
IMPORTXML | שליפה לפי נתיב בתוך המסמך | תלויה במבנה, ונשברת עם שינוי עיצוב |
IMPORTDATA | קובץ CSV או TSV בכתובת | רק קבצים, לא דפים |
IMPORTFEED | פיד RSS או Atom | רק פידים תקניים |
IMPORTRANGE | גיליון אחר | לא קשור לאתרים |
הטעות הנפוצה היא לנסות IMPORTHTML על משהו שנראה כמו טבלה אך בנוי מ-div-ים מעוצבים. מבחינת הדפדפן זו טבלה; מבחינת המסמך אין <table>, ולכן הפונקציה לא תמצא דבר.
למה זה נשבר באתרים מודרניים
הסיבה אחת ומרכזית: הפונקציות האלה מבקשות את קובץ ה-HTML מהשרת ומנתחות אותו כפי שהוא. הן אינן דפדפן - הן לא מריצות סקריפטים ולא ממתינות לבקשות נוספות.
באתר שבו התוכן מגיע אחרי טעינת הדף - חנות, לוח מודעות, דשבורד - ה-HTML הראשוני מכיל שלד ריק. מה שתראו בגיליון הוא #N/A או תאים ריקים, בזמן שבדפדפן הכול נראה מצוין. זו אינה תקלה בנוסחה אלא הבדל מהותי בין שני דברים.
הבדיקה שמאשרת את זה בעשר שניות: לכבות JavaScript בדפדפן ולרענן. מה שנשאר על המסך הוא בערך מה שהגיליון יראה.
שלוש בעיות נוספות שפוגשים בדרך
גם כשהמקור עומד בתנאי הבסיסי - HTML סטטי עם טבלה אמיתית - יש שלושה דברים שמפילים גיליונות שעבדו מצוין בהתחלה.
- מטמון - הערכים אינם מתעדכנים מיד, והרענון אינו בשליטתכם באופן מלא.
- מגבלות שימוש - גיליון עם עשרות נוסחאות ייבוא חיות נעשה איטי, וחלקן מחזירות שגיאה לסירוגין.
- שינוי מבנה -
IMPORTXMLנשען על נתיב בתוך המסמך, וכל שינוי עיצוב במקור מפיל אותו בלי אזהרה.
השנייה מפתיעה הכי הרבה משתמשים. גיליון שעבד מצוין עם חמש נוסחאות מתחיל להתנהג באופן לא צפוי עם ארבעים, והתסמין - ערכים שנעלמים ומופיעים - נראה אקראי לחלוטין. זה גם הרמז הברור ביותר שהגיליון הפך מיעד לכלי איסוף.
מה Apps Script מוסיף, ומה לא
כשהפונקציות המובנות אינן מספיקות אבל המקור עדיין סטטי, יש שלב ביניים שלא דורש לצאת מהגיליון בכלל.
Apps Script מאפשר לכתוב פונקציה שמושכת דף ומעבדת אותו בקוד, ולהריץ אותה לפי לוח זמנים. זה פותר שלושה דברים: שליטה במה נשלף, עיבוד לפני הכתיבה לגיליון, ותזמון שאינו תלוי בפתיחת הקובץ.
מה שהוא אינו פותר: הוא עדיין מושך HTML ולא מריץ את הדף. אתר שדורש רינדור יישאר מחוץ להישג יד, וכך גם אתר עם התחברות או אתגר אנושי. במילים אחרות, Apps Script מרחיב את הטווח בתוך אותה קטגוריה - הוא לא מעביר אתכם לקטגוריה הבאה.
איך בונים את הגיליון כך שלא יתפרק
גם כשהמקרה מתאים לחלוטין לפונקציות המובנות, המבנה של הגיליון עצמו קובע אם הוא יחזיק חצי שנה:
- גיליון גולמי נפרד - כל נוסחאות הייבוא יושבות בלשונית אחת, ואיש לא עורך אותה ידנית.
- לשונית עבודה נפרדת - שם מתבצעים החישובים, וכך ריענון לא דורס עבודה.
- חותמת זמן - תא אחד שרושם מתי הייבוא רץ לאחרונה בהצלחה.
- תא בקרה - ספירה של שורות שהגיעו, כדי לראות מיד כשהיא צונחת.
הנקודה השנייה היא זו שנשברת הכי מהר. כשמישהו מוסיף עמודה עם הערות ליד נתונים מיובאים, הייבוא הבא דוחף את הנתונים ומזיז את ההערות שורה - ואף אחד לא מבחין עד שההערות כבר לא מתאימות לשורות.
מתי גיליון מפסיק להיות המקום הנכון
הגיליון הוא יעד מצוין: אנשים יודעים לעבוד בו, הוא משותף, והוא מספיק לרוב הצרכים. מה שהוא אינו הוא בסיס נתונים. ארבעה סימנים שהגיעה נקודת המעבר:
- הגיליון גדל עד שהוא נפתח לאט.
- צריך היסטוריה - לא רק המצב הנוכחי אלא מה השתנה ומתי.
- יותר ממערכת אחת קוראת ממנו.
- מישהו צריך לבדוק כל בוקר שהנתונים התעדכנו.
הסימן השלישי הוא הקריטי. ברגע שהגיליון מזין אוטומציה או דשבורד, שגיאת ייבוא זמנית אינה מטרד ויזואלי אלא נתון שגוי שזורם הלאה - וזה בדיוק מה שמצדיק מבנה עם ניטור, כפי שמתואר בלמה סקרייפרים נשברים.
המסלול המקובל אז הוא סקרייפר שרץ בנפרד וכותב לגיליון - הגיליון נשאר הממשק המוכר, והאיסוף עובר למקום שבו אפשר לנטר אותו. ההרחבה על מקרים דינמיים נמצאת בשאיבת דף דינמי לגיליון.
מה לבדוק לפני שמתחילים
- שהתוכן קיים ב-HTML בלי JavaScript.
- שיש
<table>או רשימה אמיתית, אם משתמשים ב-IMPORTHTML. - שהכתובת ציבורית ואינה דורשת התחברות.
- שהתדירות שאתם צריכים מתיישבת עם עדכון שאינו מיידי.
- שמספר הנוסחאות בגיליון יישאר קטן.
חמש דקות של בדיקה חוסכות את השעה שמבזבזים על ניסיון להבין למה הנוסחה מחזירה #N/A - שכמעט תמיד אינו קשור לנוסחה עצמה.
מקורות
שאלות נפוצות
למה הנוסחה עובדת ואז מפסיקה?
שתי סיבות שכיחות: המקור שינה מבנה, או שהגיליון נתקל במגבלת שימוש. אם `IMPORTXML` הפסיק להחזיר שדה מסוים בלבד, זה מבנה; אם כמה נוסחאות מתנהגות מוזר יחד, זה מגבלה.
האם זה נחשב סקרייפינג?
כן, מבחינה מעשית - מושכים תוכן מדף ומעבדים אותו. ההיבטים העובדתיים של מה מותר לאסוף אינם משתנים לפי הכלי, ומתוארים ב[האם סקרייפינג חוקי בישראל](/he/blog/is-web-scraping-legal-in-israel).
אפשר לתזמן רענון אוטומטי?
עם Apps Script כן, לפי לוח זמנים. עם הפונקציות המובנות השליטה מוגבלת, וזו סיבה נפוצה למעבר לסקריפט גם כשהמקור עצמו פשוט.
מה עושים עם אתר שדורש התחברות?
זה יוצא מטווח הכלים האלה, וזו גם נקודה שבה כדאי לעצור ולבדוק את תנאי השימוש של האתר לפני שממשיכים בכל מסלול טכני.
להמשך קריאה
שירות רלוונטי
Web Scraping וחילוץ נתונים
סקרייפינג וצינורות נתונים אמינים שמספקים נתונים נקיים.
על הכותב
יהונתן סעדיה
מפתח פרילנסר לאוטומציה, אתרים ו-MVP
אני יהונתן סעדיה, מפתח בכיר שבונה אוטומציה עסקית, אתרים מותאמים ומוצרי MVP לעסקים קטנים ובינוניים בארה"ב, אירופה וישראל. המדריכים האלה נכתבים מתוך עבודה אמיתית עם לקוחות, לא מתיאוריה.
בוא נעבוד יחדיש לך פרויקט דומה?
ספר לי מה אתה רוצה לבנות או איזה תהליך להפוך לאוטומטי. אני חוזר תוך 24 שעות עסקים עם כמה שאלות ממוקדות, ואז עוברים על זה יחד בשיחת היכרות חינמית של 30 דקות, בלי התחייבות. בסוף יש לך היקף עבודה, לוח זמנים ומחיר קבוע - או תשובה כנה שלא שווה לבנות את זה.
