Beautiful Soupモジュールを使用してコンテンツを変更するためのPythonのサンプルコードの詳細な説明

高洛峰
リリース: 2017-03-28 09:10:31
オリジナル
2668 人が閲覧しました

Beautiful Soup は、HTML または XML ファイルからデータを抽出できる Python ライブラリです。お気に入りのコンバーターを使用して、通常の方法でドキュメントを移動、検索、および変更できます。 HTML/XML ドキュメントのコンテンツを変更することもできます。この記事では、Python が Beautiful Soup モジュールを使用して、必要な友人が参照できるようにする方法を主に紹介します。

はじめに

実際、Beautiful Soup モジュールは、検索とナビゲーションに加えて、HTML/XML ドキュメントのコンテンツを変更することもできます。これは、タグの追加または削除、タグ名の変更、タグ属性値の変更、テキスト コンテンツの変更などができることを意味します。この記事では、Python が Beautiful Soup モジュールを使用してコンテンツを変更する方法を詳しく紹介します。以下ではあまり説明しませんが、詳細な概要を見てみましょう。

タグを変更する

使用されるサンプルHTMLドキュメントは引き続き次のとおりです:

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>
 """
ログイン後にコピー

タグ名の変更

soup = BeautifulSoup(html_markup,'lxml')
producer_entries = soup.ul
print producer_entries.name
producer_entries.name = "p"
print producer_entries.prettify()
ログイン後にコピー

タグの属性値を変更

# 修改标签属性
# 更新标签现有的属性值
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()
ログイン後にコピー

新しいタグを追加

new_tag メソッドを使用する新しいタグを生成し、append() insert()insert_after()insert_before() を使用します。 code> メソッドを使用して、HTML ツリーにタグを追加します。 append() insert()insert_after()insert_before()方法来将标签添加到 HTML 树中。

例如在上述的 HTML 文档的 ul 标签中添加一个 li 标签 。首先要生成新的 li 标签,然后将其插入到 HTML 树结构中 。并在 li 标签中插入相应的 p 标签。

# 添加新的标签
# 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()
ログイン後にコピー

修改字符串内容

修改字符串内容可以使用 new_string()  、append()insert() 方法。

# 修改字符串内容
# 使用 .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()
ログイン後にコピー

删除标签节点

Beautiful Soup 模块提供了 decompose()extract() 方法来删除节点。

decompose() 方法删除节点,不仅会删除当前节点,还会把其子节点一块删除了。

extract() 方法用来从 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()
ログイン後にコピー

删除标签内容

标签可能有 NavigableString 对象或者 Tag 对象作为它的子节点,移除所有的这些子节点可以使用 clear() 方法。这将会移除标签的所有的 .content。

修改内容的其他方法

除了上面说到的方法,还有其他方法用来修改内容。

insert_after()insert_before() 方法

上面的两个方法能够在标签或者字符串的前面或者后面插入一个标签或者字符串。方法只能接收一个参数,要么是 NavigableString 对象要么是 Tag 对象。

replace_with() 方法

该方法是用一个新的标签或字符串内容替代原来的标签或者字符串,能够接收一个标签或者字符串作为输入。

wrap()unwrap() 方法

wrap() 方法是用另一个标签来包裹一个标签或者字符串。

unwrap() 方法则和 wrap()

例えば、上記のHTML文書のulタグにliタグを追加します。まず、新しい li タグが生成され、HTML ツリー構造に挿入されます。そして、対応する p タグを li タグに挿入します。 🎜
# 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()
ログイン後にコピー
🎜🎜🎜文字列の内容を変更する🎜🎜🎜🎜文字列の内容を変更するには、 new_string()append()insert() を使用できます。 メソッド。 🎜rrreee🎜🎜ラベルノードの削除🎜🎜🎜Beautiful Soup モジュールは、ノードを削除するための decompose() メソッドと extract() メソッドを提供します。 🎜🎜decompose() メソッドは、現在のノードを削除するだけでなく、そのすべての子ノードも削除します。 🎜🎜extract() メソッドは、HTML ツリーからノードまたは文字列コンテンツを削除するために使用されます。 🎜rrreee🎜🎜タグのコンテンツを削除する🎜🎜🎜 タグには、NavigableString オブジェクトまたは Tag オブジェクトが子ノードとして含まれている場合があります。これらの子ノードをすべて削除するには、clear() メソッドを使用します。これにより、タグからすべての .content が削除されます。 🎜🎜🎜コンテンツを変更するその他の方法🎜🎜🎜上記の方法に加えて、コンテンツを変更する他の方法もあります。 🎜🎜insert_after() メソッドと insert_before() メソッド🎜🎜 上記の 2 つのメソッドは、ラベルまたは文字列の前後にラベルまたは文字列を挿入できます。メソッドは、NavigableString オブジェクトまたは Tag オブジェクトのいずれかのパラメータを 1 つだけ受け入れることができます。 🎜🎜replace_with() メソッド🎜🎜 このメソッドは、元のラベルまたは文字列を新しいラベルまたは文字列の内容に置き換え、入力としてラベルまたは文字列を受け取ることができます。 🎜🎜wrap() メソッドと unwrap() メソッド🎜🎜 wrap() メソッドは、ラベルまたは文字列を別のラベルでラップします。 🎜🎜 unwrap() メソッドは、wrap() メソッドの逆です。 🎜りー

以上がBeautiful Soupモジュールを使用してコンテンツを変更するためのPythonのサンプルコードの詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート