Apprentissage du robot d'exploration Python (4) Introduction à la bibliothèque Beautiful Soup

(4) Premiers pas avec la bibliothèque Beautiful Soup

Documentation officielle de la bibliothèque BeautifulSoup

(1) Éléments de base de la bibliothèque Beautiful Soup

  • La bibliothèque Beautiful Soup est une bibliothèque de fonctions pour l'analyse, la traversée et la maintenance de "l'arbre des balises"
<p class="title">...</p>

<p>..</p>	 :标签 Tag
	p		 :名称 Name (成对出现)
class='title':属性 Attributes (0个或多个)
  • BeautifulSoup correspond à tout le contenu d'un document HTML / XML
from bs4 import BeautifulSoup
soup1 = BeautifulSoup("<html>data</html>","html.parser")
soup2 = BeautifulSoup("open("D://demo.html")","html.parser")

(2) Analyseur de bibliothèque BeautifulSoup

Analyseur Comment utiliser Condition
Analyseur HTML pour BS4 BeautifulSoup ("mk", "html.parser" ) Installer la bibliothèque BS4
analyseur HTML lxml BeautifulSoup ("mk", "lxml" ) installer pip lxml
Analyseur XML de lxml BeautifulSoup ("mk", "xml" ) installer pip lxml
analyseur pour html5lib BeautifulSoup ("mk", "html5lib" ) installer pip html5lib

(3) Les éléments de base de la classe BeautifulSoup

例:<p class="title">...</p>
Élément de base Explication
Étiquette Les balises, l'unité d'organisation de l'information la plus élémentaire, avec <> et </> marquent le début et la fin
Nom Le nom du label,

Le nom est 'p', le format: .name
Les attributs Attributs de balise, organisés en format dictionnaire, format: .attrs
NavigableString Chaîne de caractères sans attribut dans la balise, chaîne de caractères dans <> ... </>, format: .string
Commentaire La partie commentaire de la chaîne dans l'étiquette, un type spécial de commentaire
from bs4 import BeautifulSoup
soup = BeautifulSoup(demo,"html.parser")
soup.title		#获得标题
soup.a			#格式:soup.<tag>,文档中存在多个相同<tag>,只返回第一个
soup.find_all('a')	#找到文档中所有的<a>标签
soup.get_text()		#从文档中获取所有文字内容

#获取<tag>的名字,格式:<tag>.name,字符串类型
soup.a.name		
soup.a.parent.name
soup.a.parent.parent.name

#一个<tag>可以有0或多个属性,字典类型
tag.attrs
tag.attrs['class']

#NavigableString类型可以跨越多个层次
soup.a.string		#bs4.element.NavigableString类型

#Comment是一种特殊类型
newsoup = BeautifulSoup("<b><!--This is a comment--></b><p>This is not a comment</p>","html.parser")
newsoup.b.string	#bs4.element.Comment类型
newsoup.p.string	#bs4.element.NavigableString类型

(4) Méthode de traversée de contenu HTML basée sur la bibliothèque bs4

Format de base HTML
Traverser l'arbre

1. Traversée vers le bas de l'arbre des balises

  • Le type BeautifulSoup est le nœud racine de l'arborescence des balises
Attributs Explication
.Contenu Liste des nœuds enfants, enregistrez tous les nœuds fils dans la liste
.enfants Le type d'itération du nœud enfant, similaire à .contents, est utilisé pour parcourir le nœud fils
.descendance Type d'itération des nœuds descendants, y compris tous les nœuds descendants, pour la traversée de boucle
soup = BeautifulSoup(demo, "html.parser")
soup.head				#获取head
soup.head.contents		#获取head的子节点列表
soup.body.contents		#获取body的子节点列表
len(soup.body.contents)	#获取body的子节点列表长度
soup.body.contents[1]

#下行遍历儿子节点
for child in soup.body.children:
    print(child)
    
#下行遍历子孙节点
for child in soup.body.descendants:
    print(children)

2. Traversée en liaison montante de l'arbre des balises

Attributs Explication
.parent Étiquette parent du nœud
.Parents Type d'itération de l'étiquette d'ancêtre du nœud, utilisé pour parcourir les nœuds d'ancêtre
#遍历所有先辈节点,包括soup本身,所以要区别判断
soup = BeautifulSoup(demo, "html.parser")
for parent in soup.a.parents:
	if parent is None:
    	print(parent)
   	else:
        print(parent.name)

3. Traversée parallèle de l'arborescence des étiquettes

Attributs Explication
.next_sibling Renvoie la prochaine étiquette de nœud parallèle dans l'ordre du texte HTML
.previous_sibling Renvoie l'étiquette de nœud parallèle précédente dans l'ordre du texte HTML
.next_siblings Type d'itération, retourne les balises de nœuds parallèles suivantes dans l'ordre du texte HTML
.previous_siblings Type d'itération, retourne les balises de nœuds parallèles précédentes dans l'ordre du texte HTML

Traversée parallèle

#遍历后续节点
for sibling in soup.a.next_sibling:
	print(sibling)

#遍历前续节点    
for sibling in soup.a.previous_sibling:
	print(sibling)

(5) Sortie au format HTML basée sur la bibliothèque bs4

#美化输出
#.prettify()为HTML文本<>及其内容增加了'\n'
soup.prettify()
#.prettify()可用于标签
soup.a.prettify()

Balises de nœud |
| .previous_sibling | Renvoie les balises de nœud parallèle précédentes dans l'ordre du texte HTML |
| .next_siblings | Type d'itération, retourne les balises de nœud parallèle suivantes dans l'ordre du texte HTML |
| .previous_siblings | Type d'itération, retourne dans l'ordre du texte HTML Étiquette de nœud parallèle précédente |

[L'image du lien externe est en cours de transfert ... (img-mxfhEfda-1586863050051)]

#遍历后续节点
for sibling in soup.a.next_sibling:
	print(sibling)

#遍历前续节点    
for sibling in soup.a.previous_sibling:
	print(sibling)

(5) Sortie au format HTML basée sur la bibliothèque bs4

#美化输出
#.prettify()为HTML文本<>及其内容增加了'\n'
soup.prettify()
#.prettify()可用于标签
soup.a.prettify()
  • La bibliothèque bs4 transforme n'importe quelle entrée HTML en encodage UTF-8
10 articles originaux publiés · Like1 · Visites 139

Je suppose que tu aimes

Origine blog.csdn.net/qq_39419113/article/details/105519006
conseillé
Classement