為什麼 BeautifulSoup 有時不回傳任何內容以及如何避免屬性錯誤?

Mary-Kate Olsen
發布: 2024-11-20 19:30:18
原創
282 人瀏覽過

Why Does BeautifulSoup Sometimes Return None and How Do I Avoid AttributeErrors?

為什麼BeautifulSoup 函數可以回傳None 以及如何避免AttributeError: 'NoneType' object has no attribute...

使用BeautifulSoup 解析您可能會遇到時,您可能會遇到時,當您可能會遇到BeautifulSoup 解析沒有與NoneType 物件相關的結果或AttributeError 異常。當在解析的資料中找不到特定元素或屬性時,就會發生這種情況。

了解 BeautifulSoup 查詢

BeautifulSoup 提供單一結果和多重結果查詢。如果未找到匹配元素,支援多個結果的 .find_all 等方法將傳回空列表。

但是,.find 和 .select_one 等方法需要單一結果,如果未找到符合項,則傳回 None。這與其他可能引發異常的程式語言不同。

處理None 結果

要避免在使用單一結果方法的None 結果時出現AttributeError 錯誤:

  • 檢查是否存在:
  • 檢查是否存在:
  • 檢查是否存在:

檢查是否存在:

在存取結果的屬性之前,使用if result is not 驗證它不是None None:.

print(soup.sister)  # Returns None because no <sister> tag exists

print(soup.find('a', class_='brother'))  # Returns None because no <a> tag with class="brother" exists

print(soup.select_one('a.brother'))  # Returns None, same reason as above

soup.select_one('a.brother').text  # Throws AttributeError because 'None' has no 'text' attribute
登入後複製
使用 try/ except:

使用 try/ except 區塊優雅地處理潛在的 AttributeError 異常。

if soup.sister is not None:
    print(soup.sister.name)  # Safely accesses the tag name

try:
    print(soup.find('a', class_='brother').text)
except AttributeError:
    print("No 'brother' class found")  # Catches the potential error

brother_text = soup.select_one('a.brother') or "Brother not found"  # Assigns a default value if not found
登入後複製

使用預設值:

如果元素或屬性應該存在,如果不存在則提供預設值找到。 範例考慮問題中的程式碼範例:要正確處理這些場景,請使用下列技巧:遵循這些準則,您可以在使用BeautifulSoup 解析時防止AttributeError 異常並有效處理None結果HTML。

以上是為什麼 BeautifulSoup 有時不回傳任何內容以及如何避免屬性錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板