Maison > développement back-end > Tutoriel Python > Explication détaillée de l'exemple de code Python pour modifier le contenu à l'aide du module Beautiful Soup

Explication détaillée de l'exemple de code Python pour modifier le contenu à l'aide du module Beautiful Soup

高洛峰
Libérer: 2017-03-28 09:10:31
original
2676 Les gens l'ont consulté

Beautiful Soup est une bibliothèque Python qui peut extraire des données à partir de fichiers HTML ou XML. Il vous permet de parcourir, rechercher et modifier des documents de la manière habituelle via votre convertisseur préféré. Il peut également modifier le contenu des documents HTML/XML. Cet article présente principalement comment Python utilise le module Beautiful Soup pour modifier le contenu. Les amis dans le besoin peuvent s'y référer.

Préface

En effet, en plus de rechercher et de naviguer, le module Beautiful Soup peut également modifier le contenu des documents HTML/XML. Cela signifie pouvoir ajouter ou supprimer des balises, modifier les noms des balises, modifier les valeurs des attributs des balises, modifier le contenu du texte, etc. Cet article vous présente en détail comment Python utilise le module Beautiful Soup pour modifier le contenu. Je n'entrerai pas dans les détails ci-dessous, mais jetons un coup d'œil à l'introduction détaillée.

Modifier la balise

L'exemple de document HTML utilisé est toujours le suivant :

html_markup="""
 <p class="ecopyramid">
 <ul id="producers">
  <li class="producerlist">
  <p class="name">plants</p>
  <p class="number">100000</p>
  </li>
  <li class="producerlist">
  <p class="name">algae</p>
  <p class="number">100000</p>
  </li>
 </ul>
 </p>
 """
Copier après la connexion

Modifier la balise nom

soup = BeautifulSoup(html_markup,'lxml')
producer_entries = soup.ul
print producer_entries.name
producer_entries.name = "p"
print producer_entries.prettify()
Copier après la connexion

Modifier la valeur de l'attribut de la balise

# 修改标签属性
# 更新标签现有的属性值
producer_entries['id'] = "producers_new_value"
print producer_entries.prettify()
# 标签添加新的属性值
producer_entries['class'] = "newclass"
print producer_entries.prettify()
# 删除标签属性值
del producer_entries['class']
print producer_entries.prettify()
Copier après la connexion

Ajouter une nouvelle balise

Nous pouvons utiliser new_tag pour générer une nouvelle balise, puis utilisez les méthodes append() , insert(), insert_after(), insert_before() pour ajouter la balise à l'arborescence HTML.

Par exemple, ajoutez une balise li à la balise ul du document HTML ci-dessus. Tout d’abord, une nouvelle balise li est générée puis insérée dans l’arborescence HTML. Et insérez la balise p correspondante dans la balise li.

# 添加新的标签
# new_tag 生成一个 tag 对象
new_li_tag = soup.new_tag("li")
# 标签对象添加属性的方法
new_atag = soup.new_tag("a",href="www.example.com" rel="external nofollow" )
new_li_tag.attrs = {'class':'producerlist'}
soup = BeautifulSoup(html_markup,'lxml')
producer_entries = soup.ul
# 使用 append() 方法添加到末尾
producer_entries.append(new_li_tag)
print producer_entries.prettify()
# 生成两个 p 标签,将其插入到 li 标签中
new_p_name_tag = soup.new_tag("p")
new_p_name_tag['class'] = "name"
new_p_number_tag = soup.new_tag("p")
new_p_number_tag["class"] = "number"
# 使用 insert() 方法指定位置插入
new_li_tag.insert(0,new_p_name_tag)
new_li_tag.insert(1,new_p_number_tag)
print new_li_tag.prettify()
Copier après la connexion

Modifier le contenu de la chaîne

Vous pouvez utiliser les méthodes new_string() , append() , insert() pour modifier le contenu de la chaîne.

# 修改字符串内容
# 使用 .string 属性修改字符串内容
new_p_name_tag.string = 'new_p_name'
# 使用 .append() 方法添加字符串内容
new_p_name_tag.append("producer")
# 使用 soup 对象的 new_string() 方法生成字符串
new_string_toappend = soup.new_string("producer")
new_p_name_tag.append(new_string_toappend)
# 使用insert() 方法插入
new_string_toinsert = soup.new_string("10000")
new_p_number_tag.insert(0,new_string_toinsert)
print producer_entries.prettify()
Copier après la connexion

Supprimer le nœud d'étiquette

Le module Beautiful Soup fournit les méthodes decompose() et extract() pour supprimer des nœuds. La méthode

decompose() pour supprimer un nœud supprimera non seulement le nœud actuel, mais supprimera également tous ses nœuds enfants. La méthode

extract() est utilisée pour supprimer des nœuds ou du contenu de chaîne de l'arborescence HTML.

# 删除节点
third_producer = soup.find_all("li")[2]
# 使用 decompose() 方法删除 p 节点
p_name = third_producer.p
p_name.decompose()
print third_producer.prettify()
# 使用 extract() 方法删除节点
third_producer_removed = third_producer.extract()
print soup.prettify()
Copier après la connexion

Supprimer le contenu de la balise

Une balise peut avoir des objets NavigableString ou des objets Tag comme nœuds enfants pour supprimer tous ces nœuds enfants, utilisez la méthode clear(). . Cela supprimera tous les .content de la balise.

Autres méthodes pour modifier le contenu

En plus des méthodes mentionnées ci-dessus, il existe d'autres méthodes pour modifier le contenu. Méthodes

insert_after() et insert_before()

Les deux méthodes ci-dessus peuvent insérer une étiquette ou une chaîne avant ou après l'étiquette ou la chaîne. Les méthodes ne peuvent accepter qu'un seul paramètre, soit un objet NavigableString, soit un objet Tag.

replace_with() Méthode

Cette méthode remplace la balise ou la chaîne d'origine par une nouvelle balise ou le contenu de la chaîne, et peut recevoir une balise ou une chaîne en entrée. Méthodes

wrap() et unwrap() La méthode

wrap() enveloppe une étiquette ou une chaîne avec une autre étiquette. La méthode

unwrap() est à l'opposé de la méthode wrap().

# wrap()方法
li_tags = soup.find_all('li')
for li in li_tags:
 new_p_tag = soup.new_tag('p')
 li.wrap(new_p_tag)
print soup.prettify()
# unwrap()方法
li_tags = soup.find_all("li")
for li in li_tags:
 li.p.unwrap()
print soup.prettify()
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal