(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
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 |
#遍历后续节点
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