
pip הוא מנהל ההתקנות של Python, והוא מתקין מודולים ודואג לתלויות שלהם. מתקינים את BeautifulSoup (bs4), שמנתח HTML.urllib כדי לפתוח את הכתובת ולקרוא את התוכן. התוכן מפוענח כ-UTF-8, כדי שהעברית תופיע נכון.a. לכל קישור מביאים את ה-href, ואם הוא חסר מחזירים מחרוזת ריקה.ThreadPool מתוך multiprocessing.pool עם 10 תהליכונים, ו-imap מפעיל את הבדיקה על כל הקישורים. השורה join מוודאת שהתוכנית לא מסתיימת לפני שהכול הסתיים.pip search <name> ו-pip install <name> מחפשים ומתקינים מודול.time.time() מודד את משך ההרצה.הטקסט המלא של הדקות הראשונות בהרצאה «כתיבת SCRIPT הבודק לינקים באתר» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
שלום לכולם, בשיעור הקרוב אנחנו נכתוב סקריפט שייכנס לאתר פרקטיס יו, יעבור על כל הכישורים ויבדוק שהם תקינים. כדי לעשות את הדבר הזה, נתחיל בהתקנת מודול שנקרא Beautiful Soup.
מנהל ההתקנות של פייתון נקרא פיפ. מנהל ההתקנות זה בעצם כלי שמאפשר לנו להתקין מודולים, פקקג'ים של פייתון, ומנהל לנו את כל ההתקנה וההסרה של מודולים. למשל, טיפול בתלויות.
כלומר, לפעמים אנחנו צריכים להוריד מודול שצריך מודול אחר, אז הוא דואג גם להתקין את המודול הזה. אם אתם מכירים, בג'אווה סקריפט יש להם מנהל התקנות שנקרא NPM, ובלינוקס יש מנהל התקנות שנקרא YAM ברדאט, ויש עוד הרבה מנהלי התקנות לדברים שונים.
אז החל מפייתון 2.7.9, בווינדוס בא בילד אין עם YAM, טיפ.exe אם רגע נעבור בקצרה לפקודות יש לנו install uninstall list מראה לנו את כל מה שמותקן search ועוד פקודות קצת פחות שימושיות אז אנחנו רוצים לעשות search למשהו שנקרא beautiful soup לחפש beautiful ונראה אם הוא מוצא את זה הוא לא מוצא את זה נחפש סופ, כשאני בודק את האיות שלי, הנה זה
פה. BeautifulSoup.bib.com/soup4 המודול BeautifulSoup מאפשר לנו לקחת קובץ html ולפרסר אותו ולעבור עליו בצורה יותר טובה ויותר מהירה מאשר ביטויים רגולריים או סתם לעשות find a string.
בואו נפתח פה מודול חדש, נקרא לו site scraper ונתחיל מלעשות אימפורט לביוטיפול סופ. נתחיל בלעשות אימפורט לביוטיפול סופ, bs4, וטכנון כבר נעשה את זה, prompt bs4, אנחנו רוצים לעשות ישר אימפורט לביוטיפול סופ.
עכשיו, אם אנחנו לא יודעים מה יש לנו בדבר הזה, אפשר פשוט להעתיק את זה, לפתוח אינטראקטיב של, ולעשות help, לעשות דבר ראשון אימפורט, ואז אפשר לעשות help לביוטיפול סופ, ונוכל לראות בקצרה דוקימנטציה על הדבר הזה.
דרך נוספת, כמובן, פשוט לפתוח את האתר הרשמי שלהם ולהסתכל איך הם עושים. יש לנו פה html מסוים שנראה כך, soop=beautiful soop הדוקומנטציה שיצרו פה למעלה ואז אפשר לעשות עליו לקבל את כל הטייטלים, את ה-name, לקבל קלאסים מסוימים.
בעצם המטרה שלנו היא לקבל את כל הלינקים. אז בואו נתחיל דבר ראשון בלהיכנס לאתר של PracticeU וככה נראה האתר. בואו רגע נסתכל פה ב Firefox, זה לא באמת משנה, רק נסתכל על ה-source code של האתר ונראה איך הוא נראה.
אז מה שאנחנו רוצים לעשות זה לעבור על כל ההרפים, כל ה-a, כל ה-a שזה בעצם הלינקים, ולבדוק אחד-אחד שהם באמת עובדים. אין לנו פה לינקים שבורים באתר.
אז בואו נראה איך אנחנו עושים את זה. כדי לקרוא מאתר אינטרנט, נשתמש במודול שבא יחד עם פייתון שנקרא url-lib. url שלנו, כלומר ה-url של practice-u הוא זה, ולבנר של ה-URL, בואו דבר ראשון נעשה כזה דבר, נעשה פרינט לדאטה, סתם נראה שקיבלנו כמו שצריך, ואז נעשה סופ,
כמו שראינו בדוגמה, נביא ל-BeautifulSoup של דאטה, ואם רגע נחזור לדוגמת קוד, html.parser.dring, ונעשה פרינט של דיר, שתוכל לראות מה אנחנו מקבלים.
בואו נרליץ את זה ונראה מה, אוקיי, אז השורה הראשונה זה הדאטה שלנו. אפשר לראות את זה גם עם דיבאגר, דרך אגב. קליק ימני, דיבאג אז פייטון ראן, פרינט דאטה, ריד, זה מה שהיה חסר לנו, דאטה נקודה ריד, זה כנראה באנקודינג הרגע.
אז אחרי בדיקה קטנה, למרות שזה לא חשוב ספציפית למה שרצינו, כן היה חשוב לי לקרוא את הדברים בעברית. אז מה שצריך לעשות כדי לקרוא בעברית, צריך לעשות encoding של הסטרינג שאנחנו מקבלים ל-UTF אז אם אני אדפיס רגע את הקודינג אני אדפיס רגע בדיבאג, נראה מה קורה פה בדיוק
האנקודינג בעצם הוא UTF-8, אתם רואים? ויש פונקציה שנקראת Unicode, שהיא לוקחת את ה-content שלנו כלומר את התוכן שהורדנו, מה שעשינו להוריד מתוך ה-URLים והיא משתמשת ב-UTF-8 כדי לקודד אותו ואם נסתכל פה באמת ב-content נראה אותו פה על המסך ונראה את העברית פה כמו שצריך. אוקיי, אז עכשיו
בואו נעשה כזה דבר. אנחנו עכשיו רוצים לעבור על כל הלינקים, שזה A, ובואו נתחיל בלהדפיס חלק מהם. בואו לינק in.
זה יקבל את כל הלינקים בסופרינט. אני לא רוצה להדפיס את כל הלינקים, אני רוצה להדפיס רק ארבעה לינקים. אז אם אני אגיד שאני רוצה להדפיס את הלינק מ-10 עד 14, מ-10, נראה מה קורה.
אוקיי, אז מודפס לנו פה בעצם כל הלינק. A קלאס. בוא נעיף את ההדפסה הזאת, זה סתם מבלבל, שוב, איי, אוקיי, עכשיו מי שקצת מכיר html יודע שאנחנו בעצם רוצים את התגיד של ה href, בואו נעשה, כנראה שלחלק מהדברים שם אין href, אז נעשה לינק לגט href, מה שגט אומר זה שתביא לי את הכי
href, ואם הוא לא קיים תחזיר לי את הפרמטר השני של הפונקציה שבמקרה הזה זה סטרינג ריק, אוקיי, אז קיבלנו פה, כנראה שבדף הזה חלק מה hrefs לא קיימים, לא משנה למה, זה לא מעניין אותנו כרגע.
אז שימו לב שקיבלנו פה כרגע שלושה לינקים, slash en, יש לנו את ה... בואו סתם ככה ניקח את ה-slash הזה, את הדבר הזה, בואו נראה שהוא עובד.
אז נלך לאתר, ואנחנו רואים שזה מביא לנו איזשהו לינק, אולי בגלל שזה בסיס JavaScript זה לא מעדכן את האתר, הוא לא מביא לנו איזו שגיאה.
נראה באתר הזה עשו דברים שהוא לא מראה שגיאות על לינקים לא קיימים או משהו כזה. אז באתר הזה אנחנו רואים שזה קצת בעייתי, כי בדרך כלל כש-HTML לא קיים, אז האתר מחזיר 404, שזה שגיאה שהעמוד לא קיים.
אבל מי שכתב את האתר הזה לא רצה לעשות את זה. רגע נחזור ללינק שהקודם. שימו לב שהשתנה פה משהו, קורסים, כלומר, הגענו לאיזשהו משהו ולידי.
יש לי רעיון איך לבדוק בכל זאת שמדובר בלינק ולידי או לא. הרעיון שלי זה אנחנו נשמור את התבנית של האתר הגנרית, ואז אם הלינק שלנו, אני מקווה שברמת ה-HTML צריך לראות, הוא מחזיר את אותו עמוד בדיוק כמו האינדקס הרגיל, אז יש לנו חשש או שזה סלאש ריק או שזה לינק שהוא לא קיים באמת.
שימו לב שבדרך כלל באתרים אחרים אנחנו כן נראה ציות לכללי 404 ו-503. אז בואו נראה איך אנחנו מתחילים לכתוב את הדבר הזה.
לינק ו ללינק get, if לינק, כלומר אם קיים לנו לינק אז אנחנו רוצים בעצם לקרוא לשם. מה אנחנו נעשה? נעשה, בואו נשמור לנו איזשהו list של כל התוצאות.
אנחנו נעשה lst.append של url.lib.urlopen של url ועוד לינק. כל הדבר הזה אני רוצה לעשות read, ואני אשמור את זה פה בדבר הזה.
עכשיו בוא נעשה כבר על הדרך master שווה לcontent ואז נכתוב if lst במקום ה-1 שזה מה שעכשיו הוספתי שווה שווה ל-master כלומר ה-read של שניהם שווה אז בוא נדפיס הודעה might have