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> """
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()
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()
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()
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()
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()
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()
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!