Maison  >  Article  >  développement back-end  >  Pourquoi BeautifulSoup ne renvoie-t-il parfois aucun message et comment puis-je éviter les erreurs d'attribut ?

Pourquoi BeautifulSoup ne renvoie-t-il parfois aucun message et comment puis-je éviter les erreurs d'attribut ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-20 19:30:18284parcourir

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

Pourquoi les fonctions BeautifulSoup peuvent renvoyer Aucun et comment éviter AttributeError : l'objet 'NoneType' n'a pas d'attribut...

Lorsque vous utilisez BeautifulSoup pour analyser du HTML, vous pouvez rencontrer Aucun résultat ou exceptions AttributeError liées aux objets NoneType. Celles-ci se produisent lorsqu'un élément ou un attribut spécifique est introuvable dans les données analysées.

Comprendre les requêtes BeautifulSoup

BeautifulSoup fournit à la fois des requêtes à résultat unique et à résultats multiples. Les méthodes comme .find_all qui prennent en charge plusieurs résultats renvoient une liste vide si aucun élément correspondant n'est trouvé.

Cependant, des méthodes comme .find et .select_one, qui attendent un seul résultat, renvoient Aucun si aucune correspondance n'est trouvée. Ceci est différent des autres langages de programmation où une exception peut être levée à la place.

Gestion des résultats Aucun

Pour éviter les erreurs AttributeError lorsque vous travaillez avec des résultats Aucun à partir de méthodes à résultat unique :

  • Vérifier l'existence : Avant d'accéder aux attributs du résultat, vérifiez qu'il ne s'agit pas de Aucun en utilisant si le résultat n'est pas Aucun :.
  • Utilisez try/sauf : Gérez les exceptions potentielles AttributeError avec élégance à l'aide des blocs try/sauf.
  • Utilisez les valeurs par défaut : Si un élément ou un attribut devrait être présent, fournissez les valeurs par défaut au cas où il ne serait pas trouvé.

Exemples

Considérez les exemples de code de la question :

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

Pour gérer correctement ces scénarios, utilisez les techniques suivantes :

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

En suivant ces directives, vous pouvez empêcher les exceptions AttributeError et gérer efficacement les résultats Aucun lorsque vous utilisez BeautifulSoup pour analyser le HTML.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn