פרק 5: עיבוד וניתוח של עמודי רשתניתוח תכונות בקלותניתוח התג <TITLE> היה קל במיוחד כיוון שזהו תג פשוט ללא תכונות נוספות (attribute). אולם, תגים רבים מכילים תכונות משתנות וחיוניות לניתוח שלנו. הבא נתבונן, למשל, בתג ה<META> אשר לו שתי תכונות NAME ו CONTENT. באופן כללי, התג META עשוי להראות כך: <META NAME="Keywords" CONTENT="food,cuisine,cooking,recipes"> הבא נדמיין לעצמנו מצב בו אנו רוצים לנתח את הקוד לקבלת מילות המפתח שלו (meta keywords). כיוון שהתג <META> מכיל מידע נוסף פרט ל keywords (למשל, מחבר, תאור, זכויות יוצרים וכו'), איננו יכולים לשלוף את ה<META> הראשון שנפגוש, אלא יש לנו צורך בניתוח של כל תכונת NAME של ה<META> על למציאת התג "Keywords" - ורק במצב זה נוכל לכרות את המידע שאנו מחפשים משדה ה CONTENT. sub parse_meta_keywords{ #parse and output meta data $parser=HTML::TokeParser->new(\$webPage); while (my $token=$parser->get_tag("meta")) { if ($token->[1]{name}=~/keywords/i) { print "<p><h2>Meta Keywords</h2> ". $token->[1]{content}."</p>" } } } גם הפעם, אתחלנו את ה TokeParser לתחילת המסמך המוכל ב webPage$. לולאת ה while מוודא שה TokeParser יעבור על כל תגי ה <META> המצויים במסמך, ולא רק על הראשון. ונבצע בדיקה עבור כל תג, האם הוא התג "Keyword". אומנם לא אמור להיות יותר מתג אחד כזה, ויכולנו להפסיק את הבדיקה אחרי שמצאנו את התג הראשון, אך ישנה אפשרות שמישהו הכניס כמה תגי Keywords לתוך מסמך בודד, בגלל רשלנות. מתודת ה ()get_tag של ה TokeParser שולפת את תג ה<META> הבא שהיא מוצאת, ומכניסה את רכיביו השונים לתוך המערך token$. פניה למערך יכולה להיות מאוד מבלבלת, והתחביר שלה יכול להיות משונה ביותר. לפיכך, מוטב לא לחשוב על המדוע, ולהתמקד באיך - אתם יכולים פשוט להעתיק קוד זה לתוך התוכנית שלכם ולא לסבך את עצמכם בסיבות שבגללם הקוד נראה איך שהוא נראה. די אם נאמר, שאנו יכולים לגשת לתכונות של התג כמו לטבלת האש של [token->[1 $. משמע ש {token->[1]{name$ מחזירה את ערך שדה הNAME בתג. פניה דומה ל {token->[1]{content$ תחזיר את תוכן שדה ה CONTENT, אתם יכולים להרחיב זאת לכל תג אותו אתם מנתחים. בדוגמה שלנו אנו בודקים אם שדה ה NAME שלנו מכיל את המילה "Keywords" (בלי הבדל בין אותיות גדולות לקטנות). אם כן תוכן תכונת ה CONTENT מודפס למסך; אחרת זהו אינו התג META Keywords ולכן נמשיך לתג ה <META> הבא, עד לסיום הניתוח. TokeParser :חישוב המחיר
|