使用BeautifulSoup 解析您可能會遇到時,您可能會遇到時,當您可能會遇到BeautifulSoup 解析沒有與NoneType 物件相關的結果或AttributeError 異常。當在解析的資料中找不到特定元素或屬性時,就會發生這種情況。
BeautifulSoup 提供單一結果和多重結果查詢。如果未找到匹配元素,支援多個結果的 .find_all 等方法將傳回空列表。
但是,.find 和 .select_one 等方法需要單一結果,如果未找到符合項,則傳回 None。這與其他可能引發異常的程式語言不同。
要避免在使用單一結果方法的None 結果時出現AttributeError 錯誤:
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 區塊優雅地處理潛在的 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中文網其他相關文章!