• בלוג
  • עמוד 30
  • היום למדתי: בדיקת מאפיין ב Beautiful Soup בפייתון

היום למדתי: בדיקת מאפיין ב Beautiful Soup בפייתון

31/01/2024

הקוד הבא נכשל כי ללינק השני אין מאפיין href:

from bs4 import BeautifulSoup
text = """<div>
    <a href="#a">a</a>
    <a>not a link</a>
</div>"""

if __name__ == "__main__":
    soup = BeautifulSoup(text, features="html.parser")
    for link in soup.find_all("a"):
        print(link["href"])

יותר מעניין לשים לב ש bs4.Tag לא מימשו בדיקת שייכות הקוד הזה רץ אבל לא מדפיס אף לינק:

for link in soup.find_all("a"):
    if "href" in link:
        print(link["href"])

מה עושים? דרך אחת היא להסתכל על מאפיין attrs של התג, שהוא כן מילון:

for link in soup.find_all("a"):
    if "href" in link.attrs:
        print(link["href"])

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

for link in soup.find_all("a"):
    if link.get("href") is not None:
        print(link["href"])