PracticU

כתיבת SCRIPT הבודק לינקים באתר

בלי כתוביותעם כתוביות
PracticU › קורס פייתון - Python › כתיבת SCRIPT הבודק לינקים באתר
מילון מושגים:
סקריפט - קובץ המכיל רצף פקודות שמבוצעות על ידי מפרש, לרוב כדי להפוך משימות לאוטומטיות.
Python - שפת תכנות עילית וקריאה, נפוצה בפיתוח, אוטומציה, ניתוח נתונים ולמידת מכונה.
HTML - שפת הסימון שבה בונים את מבנה ותוכן דפי האינטרנט, באמצעות תגיות שמגדירות כותרות, פסקאות, קישורים ועוד.
UTF-8 - שיטת קידוד נפוצה של Unicode, שמייצגת כל תו במספר משתנה של בתים ותואמת ל-ASCII.
אובייקט - יחידה בתכנות מונחה עצמים שמאגדת נתונים (תכונות) ופעולות (מתודות). נוצר בדרך כלל ממחלקה המשמשת כתבנית.
מחרוזת - סוג נתונים שמייצג רצף של תווים, כלומר טקסט, ומשמש לאחסון מילים, משפטים או כל רצף סימנים.

כתיבת SCRIPT הבודק לינקים באתר
השיעור מציג כיצד כותבים סקריפט שמוריד דף מאתר, מחפש בו את כל הקישורים ובודק שהם תקינים. הדוגמה נכתבת על אתר PracticU.
השלבים העיקריים
1. התקנת מודול: pip הוא מנהל ההתקנות של Python, והוא מתקין מודולים ודואג לתלויות שלהם. מתקינים את BeautifulSoup (bs4), שמנתח HTML.
2. הורדת הדף: משתמשים ב-urllib כדי לפתוח את הכתובת ולקרוא את התוכן. התוכן מפוענח כ-UTF-8, כדי שהעברית תופיע נכון.
3. חילוץ הקישורים: יוצרים אובייקט BeautifulSoup ומבקשים את כל התגיות a. לכל קישור מביאים את ה-href, ואם הוא חסר מחזירים מחרוזת ריקה.
4. בדיקת הקישור: פותחים כל קישור ומשווים את התוכן שחזר לתוכן של הדף הראשי. אם הם זהים, סביר שהקישור שבור והאתר מחזיר את הדף הראשי. בדרך כלל אתרים מחזירים 404 או 500 לדף שאינו קיים, אבל באתר שנבדק התשובה הייתה 200 גם לקישורים שלא קיימים, ולכן הבדיקה נשענה על ההשוואה לתוכן.
5. הרצה מקבילית: ThreadPool מתוך multiprocessing.pool עם 10 תהליכונים, ו-imap מפעיל את הבדיקה על כל הקישורים. השורה join מוודאת שהתוכנית לא מסתיימת לפני שהכול הסתיים.
פקודות והגדרות
- pip search <name> ו-pip install <name> מחפשים ומתקינים מודול.
- time.time() מודד את משך ההרצה.
שימו לב
בלי תהליכונים הסקריפט רץ כ-42 שניות. עם עשרה תהליכונים הזמן ירד לכ-12 עד 15 שניות. הוספת עוד תהליכונים לא שיפרה את התוצאה באופן משמעותי, ולכן מספר התהליכונים המתאים תלוי במחשב ובעומס שעליו.
הסקריפט מראה שילוב של הורדת דפים, ניתוח HTML והרצה מקבילית.
השיעור הבא בקורס: lambda

פרקי ההרצאה: כתיבת SCRIPT הבודק לינקים באתר

  1. 00:00

    מבוא: סקריפט לבדיקת לינקים באתר

  2. 00:38

    מנהל החבילות pip והתקנת Beautiful Soup

  3. 01:39

    Beautiful Soup לעומת ביטויים רגולריים

  4. 04:20

    כניסה לאתר ובדיקת קוד המקור של הדף

  5. 04:57

    קריאת הדף עם urllib ופירסור

  6. 07:54

    קידוד העברית ב-UTF-8

  7. 08:47

    איסוף כל קישורי a ותכונת href

  8. 11:09

    זיהוי קישור שבור: 404 ודפי ברירת מחדל

תמלול ההרצאה: כתיבת SCRIPT הבודק לינקים באתר

הטקסט המלא של הדקות הראשונות בהרצאה «כתיבת SCRIPT הבודק לינקים באתר» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:03

    שלום לכולם, בשיעור הקרוב אנחנו נכתוב סקריפט שייכנס לאתר פרקטיס יו, יעבור על כל הכישורים ויבדוק שהם תקינים. כדי לעשות את הדבר הזה, נתחיל בהתקנת מודול שנקרא Beautiful Soup.

  2. 00:19

    מנהל ההתקנות של פייתון נקרא פיפ. מנהל ההתקנות זה בעצם כלי שמאפשר לנו להתקין מודולים, פקקג'ים של פייתון, ומנהל לנו את כל ההתקנה וההסרה של מודולים. למשל, טיפול בתלויות.

  3. 00:37

    כלומר, לפעמים אנחנו צריכים להוריד מודול שצריך מודול אחר, אז הוא דואג גם להתקין את המודול הזה. אם אתם מכירים, בג'אווה סקריפט יש להם מנהל התקנות שנקרא NPM, ובלינוקס יש מנהל התקנות שנקרא YAM ברדאט, ויש עוד הרבה מנהלי התקנות לדברים שונים.

  4. 00:59

    אז החל מפייתון 2.7.9, בווינדוס בא בילד אין עם YAM, טיפ.exe אם רגע נעבור בקצרה לפקודות יש לנו install uninstall list מראה לנו את כל מה שמותקן search ועוד פקודות קצת פחות שימושיות אז אנחנו רוצים לעשות search למשהו שנקרא beautiful soup לחפש beautiful ונראה אם הוא מוצא את זה הוא לא מוצא את זה נחפש סופ, כשאני בודק את האיות שלי, הנה זה

  5. 01:42

    פה. BeautifulSoup.bib.com/soup4 המודול BeautifulSoup מאפשר לנו לקחת קובץ html ולפרסר אותו ולעבור עליו בצורה יותר טובה ויותר מהירה מאשר ביטויים רגולריים או סתם לעשות find a string.

  6. 02:20

    בואו נפתח פה מודול חדש, נקרא לו site scraper ונתחיל מלעשות אימפורט לביוטיפול סופ. נתחיל בלעשות אימפורט לביוטיפול סופ, bs4, וטכנון כבר נעשה את זה, prompt bs4, אנחנו רוצים לעשות ישר אימפורט לביוטיפול סופ.

  7. 03:10

    עכשיו, אם אנחנו לא יודעים מה יש לנו בדבר הזה, אפשר פשוט להעתיק את זה, לפתוח אינטראקטיב של, ולעשות help, לעשות דבר ראשון אימפורט, ואז אפשר לעשות help לביוטיפול סופ, ונוכל לראות בקצרה דוקימנטציה על הדבר הזה.

  8. 03:44

    דרך נוספת, כמובן, פשוט לפתוח את האתר הרשמי שלהם ולהסתכל איך הם עושים. יש לנו פה html מסוים שנראה כך, soop=beautiful soop הדוקומנטציה שיצרו פה למעלה ואז אפשר לעשות עליו לקבל את כל הטייטלים, את ה-name, לקבל קלאסים מסוימים.

  9. 04:13

    בעצם המטרה שלנו היא לקבל את כל הלינקים. אז בואו נתחיל דבר ראשון בלהיכנס לאתר של PracticeU וככה נראה האתר. בואו רגע נסתכל פה ב Firefox, זה לא באמת משנה, רק נסתכל על ה-source code של האתר ונראה איך הוא נראה.

  10. 04:43

    אז מה שאנחנו רוצים לעשות זה לעבור על כל ההרפים, כל ה-a, כל ה-a שזה בעצם הלינקים, ולבדוק אחד-אחד שהם באמת עובדים. אין לנו פה לינקים שבורים באתר.

  11. 04:57

    אז בואו נראה איך אנחנו עושים את זה. כדי לקרוא מאתר אינטרנט, נשתמש במודול שבא יחד עם פייתון שנקרא url-lib. url שלנו, כלומר ה-url של practice-u הוא זה, ולבנר של ה-URL, בואו דבר ראשון נעשה כזה דבר, נעשה פרינט לדאטה, סתם נראה שקיבלנו כמו שצריך, ואז נעשה סופ,

  12. 05:58

    כמו שראינו בדוגמה, נביא ל-BeautifulSoup של דאטה, ואם רגע נחזור לדוגמת קוד, html.parser.dring, ונעשה פרינט של דיר, שתוכל לראות מה אנחנו מקבלים.

  13. 06:25

    בואו נרליץ את זה ונראה מה, אוקיי, אז השורה הראשונה זה הדאטה שלנו. אפשר לראות את זה גם עם דיבאגר, דרך אגב. קליק ימני, דיבאג אז פייטון ראן, פרינט דאטה, ריד, זה מה שהיה חסר לנו, דאטה נקודה ריד, זה כנראה באנקודינג הרגע.

  14. 07:54

    אז אחרי בדיקה קטנה, למרות שזה לא חשוב ספציפית למה שרצינו, כן היה חשוב לי לקרוא את הדברים בעברית. אז מה שצריך לעשות כדי לקרוא בעברית, צריך לעשות encoding של הסטרינג שאנחנו מקבלים ל-UTF אז אם אני אדפיס רגע את הקודינג אני אדפיס רגע בדיבאג, נראה מה קורה פה בדיוק

  15. 08:19

    האנקודינג בעצם הוא UTF-8, אתם רואים? ויש פונקציה שנקראת Unicode, שהיא לוקחת את ה-content שלנו כלומר את התוכן שהורדנו, מה שעשינו להוריד מתוך ה-URLים והיא משתמשת ב-UTF-8 כדי לקודד אותו ואם נסתכל פה באמת ב-content נראה אותו פה על המסך ונראה את העברית פה כמו שצריך. אוקיי, אז עכשיו

  16. 08:47

    בואו נעשה כזה דבר. אנחנו עכשיו רוצים לעבור על כל הלינקים, שזה A, ובואו נתחיל בלהדפיס חלק מהם. בואו לינק in.

  17. 09:05

    זה יקבל את כל הלינקים בסופרינט. אני לא רוצה להדפיס את כל הלינקים, אני רוצה להדפיס רק ארבעה לינקים. אז אם אני אגיד שאני רוצה להדפיס את הלינק מ-10 עד 14, מ-10, נראה מה קורה.

  18. 09:27

    אוקיי, אז מודפס לנו פה בעצם כל הלינק. A קלאס. בוא נעיף את ההדפסה הזאת, זה סתם מבלבל, שוב, איי, אוקיי, עכשיו מי שקצת מכיר html יודע שאנחנו בעצם רוצים את התגיד של ה href, בואו נעשה, כנראה שלחלק מהדברים שם אין href, אז נעשה לינק לגט href, מה שגט אומר זה שתביא לי את הכי

  19. 10:09

    href, ואם הוא לא קיים תחזיר לי את הפרמטר השני של הפונקציה שבמקרה הזה זה סטרינג ריק, אוקיי, אז קיבלנו פה, כנראה שבדף הזה חלק מה hrefs לא קיימים, לא משנה למה, זה לא מעניין אותנו כרגע.

  20. 10:28

    אז שימו לב שקיבלנו פה כרגע שלושה לינקים, slash en, יש לנו את ה... בואו סתם ככה ניקח את ה-slash הזה, את הדבר הזה, בואו נראה שהוא עובד.

  21. 10:38

    אז נלך לאתר, ואנחנו רואים שזה מביא לנו איזשהו לינק, אולי בגלל שזה בסיס JavaScript זה לא מעדכן את האתר, הוא לא מביא לנו איזו שגיאה.

  22. 11:03

    נראה באתר הזה עשו דברים שהוא לא מראה שגיאות על לינקים לא קיימים או משהו כזה. אז באתר הזה אנחנו רואים שזה קצת בעייתי, כי בדרך כלל כש-HTML לא קיים, אז האתר מחזיר 404, שזה שגיאה שהעמוד לא קיים.

  23. 11:20

    אבל מי שכתב את האתר הזה לא רצה לעשות את זה. רגע נחזור ללינק שהקודם. שימו לב שהשתנה פה משהו, קורסים, כלומר, הגענו לאיזשהו משהו ולידי.

  24. 11:32

    יש לי רעיון איך לבדוק בכל זאת שמדובר בלינק ולידי או לא. הרעיון שלי זה אנחנו נשמור את התבנית של האתר הגנרית, ואז אם הלינק שלנו, אני מקווה שברמת ה-HTML צריך לראות, הוא מחזיר את אותו עמוד בדיוק כמו האינדקס הרגיל, אז יש לנו חשש או שזה סלאש ריק או שזה לינק שהוא לא קיים באמת.

  25. 11:57

    שימו לב שבדרך כלל באתרים אחרים אנחנו כן נראה ציות לכללי 404 ו-503. אז בואו נראה איך אנחנו מתחילים לכתוב את הדבר הזה.

  26. 12:09

    לינק ו ללינק get, if לינק, כלומר אם קיים לנו לינק אז אנחנו רוצים בעצם לקרוא לשם. מה אנחנו נעשה? נעשה, בואו נשמור לנו איזשהו list של כל התוצאות.

  27. 12:33

    אנחנו נעשה lst.append של url.lib.urlopen של url ועוד לינק. כל הדבר הזה אני רוצה לעשות read, ואני אשמור את זה פה בדבר הזה.

  28. 13:00

    עכשיו בוא נעשה כבר על הדרך master שווה לcontent ואז נכתוב if lst במקום ה-1 שזה מה שעכשיו הוספתי שווה שווה ל-master כלומר ה-read של שניהם שווה אז בוא נדפיס הודעה might have

לקורס המלא: קורס פייתון אונליין למתחילים

ההרצאה הקודמת: פייטון SQLite

ההרצאה הבאה: lambda

הרצאות קשורות מקורסים אחרים

  • כתיבת SCRIPT ב-SQL
  • לינוקס Script - חלק 1
  • בניית צ'אט באתר
  • FIRST YML SCRIPT

קורסים נוספים במסלול

  • קורס יסודות התכנות - שפת JAVA - קורס ג'אווה למתחילים
  • קורס PHP - פרויקט מעשי