BeautifulSoup を使用して HTML を解析すると、次のような問題が発生する可能性があります。 None の結果、または 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
これらのシナリオを適切に処理するには、次の手法を使用します:
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 を使用して HTML を解析するときに、AttributeError 例外を防止し、None 結果を効果的に処理できます。
以上がBeautifulSoup が時々 None を返すのはなぜですか? AttributeError を回避するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。