[Python web crawler] 150 conférences pour obtenir facilement les notes de cours payantes du crawler web Python bibliothèque d'analyse de huit robots bs4 BeautifulSoup

1. Introduction à BeautifulSoup

BeautifulSoup est un analyseur HTML / XML comme lxml. Sa fonction principale est d'analyser et d'extraire des données HTML / XML

Contrairement à lxml, BeautifulSoup est basé sur HTML DOM (Document Object Model ), qui charge l'intégralité du document et analyse l'ensemble de l'arborescence DOM, de sorte que la surcharge de temps et de mémoire sera beaucoup plus importante et toutes les performances seront inférieures à lxml.

 

1.1 Comparaison des outils d'analyse:

1.2 Simple à utiliser

Lorsqu'il n'y a pas d'analyseur, aucune erreur ne sera signalée lors de l'analyse du document, mais un avertissement sera donné:

 Contenu de l'avertissement:

UserWarning: No parser was explicitly specified, so I'm using the best available HTML parser for this system ("lxml"). This usually isn't a problem, but if you run this code on another system, or in a different virtual environment, it may use a different parser and behave differently.

La signification approximative est qu'il n'y a pas d'analyseur donné, donc le meilleur analyseur lxml est utilisé par défaut, mais si vous exécutez dans différents systèmes et environnements, vous utiliserez différents analyseurs, donc les résultats ne sont pas nécessairement les mêmes. .

La recommandation officielle est lxml.

Après avoir utilisé l'analyseur, nous avons constaté que même si le document html est imparfait, lxml remplira la partie imparfaite lors de l'analyse.C'est le contenu de l'image que nous avons vu ci-dessus.

Normalement, le format html a une certaine indentation pour distinguer chaque module. Cette opération est également très facile à implémenter dans BeautifulSoup. Il suffit d'appeler la fonction prettify () dans la soupe. Les résultats sont les suivants:

 

2. Quatre objets communs

2.1 Balise

La balise est la balise en html. Lorsque vous l'utilisez, utilisez directement soup. Ajoutez le nom de la balise pour trouver le contenu de la balise.

Notez que: La balise trouvée par balise est la première qui répond aux exigences de tout le contenu.

soup = BeautifulSoup(html, 'lxml')
print(soup.p)
print(type(soup.p))#查看类型

#两个重要属性name, attrs
print(soup.head.name)
print(soup.p.name)

print(soup.p.attrs)
print(soup.p['class'])
print(soup.p.get('class'))

soup.p['class'] = 'new'
print(soup.p.attrs)

 résultat:

<p class="title" name="dromouse"><b>The Dormouse's story</b></p>
<class 'bs4.element.Tag'>
head
p
{'class': ['title'], 'name': 'dromouse'}
['title']
['title']
{'class': 'new', 'name': 'dromouse'}

2.2 NavigableString

La balise NavigableString peut obtenir le texte du contenu dans la balise.

Ou suivez l'exemple ci-dessus, importez le module NavigableString et utilisez-le.

 

2.3 BeautifulSoup

L'objet BeautifulSoup représente tout le contenu d'un document. La plupart du temps, il peut être considéré comme un objet Tag. BeautifulSoup prend en charge la plupart des méthodes de traversée de l'arborescence du document et de recherche dans l'arborescence du document.

Hérité de Tag dans le code source de BeautifulSoup.

2.3.1 Parcourir l'arborescence des documents

  • contents renvoie une liste de tous les nœuds enfants
  • children renvoie un itérateur de tous les nœuds enfants
from bs4.element import Comment

head_tag = BeautifulSoup(html, 'lxml')
print(head_tag.contents) #返回时list
print(head_tag.children)
for i in head_tag.children:
    print(i)
  • strings: si la balise contient plusieurs chaînes, vous pouvez utiliser .string pour l'inclure dans une boucle et revenir au générateur
for string in soup.strings:
    print(string)
    print(repr(string))
The Dormouse's story
"The Dormouse's story"


'\n'


'\n'
The Dormouse's story
"The Dormouse's story"


'\n'
Once upon a time there were three little sisters; and their names were

'Once upon a time there were three little sisters; and their names were\n'
,

',\n'
Lacie
'Lacie'
 and

' and\n'
Tillie
'Tillie'
;
and they lived at the bottom of a well.
';\nand they lived at the bottom of a well.'


'\n'
...
'...'


'\n'


'\n'

Process finished with exit code 0
  • stripped_string: .stripped_strings peut supprimer du contenu vierge supplémentaire ou des lignes vides dans la chaîne de sortie et revenir au générateur
for string in soup.stripped_strings:
    print(string)
    # print(repr(string))
The Dormouse's story
The Dormouse's story
Once upon a time there were three little sisters; and their names were
,
Lacie
and
Tillie
;
and they lived at the bottom of a well.
...

Process finished with exit code 0
  • get_text: récupère la chaîne sans étiquette des descendants d'une étiquette et la renvoie sous forme de chaîne normale

 2.3.2 Recherche dans l'arborescence des documents

Voir le prochain blog pour plus de détails:

https://blog.csdn.net/weixin_44566432/article/details/108664325

2.4 Commentaire

L'objet Comment est un type spécial d'objet NavigableString

 

Je suppose que tu aimes

Origine blog.csdn.net/weixin_44566432/article/details/108660050
conseillé
Classement