正式名: Bautiful Soup、このモジュールはサードパーティのライブラリであるため、個別にダウンロードする必要があります
インストール方法:
pip インストール bs4
BS4 はページを解析するときにドキュメント パーサーに依存する必要があるため、lxml も解析ライブラリとしてインストールする必要があります。
pip インストール lxml
さらに、bs4 モジュールを使用する場合は、BeautifulSoup オブジェクトを作成する必要があります。このオブジェクトに一般的に使用されるパーサーは次のとおりです。< /span> a>
- html.パーサー
- lxml
- XML
- html5lib
BeautifulSoup はデフォルトで Python の標準 HTML 解析ライブラリをサポートしていますが、いくつかのサードパーティ解析ライブラリもサポートしています。
パーサー | 説明書 | アドバンテージ | 短所 |
---|---|---|---|
Pythonの標準ライブラリ | BeautifulSoup(マークアップ,“html.parser”) | Python には標準ライブラリが組み込まれており、適度な実行速度と、強力なドキュメント フォールト トレランスが備わっています。 | Python2.7.3 または 3.2.2 より前のバージョンではドキュメントのフォールト トレランスが不十分です |
lxml HTML パーサー | BeautifulSoup(マークアップ、“lxml”) | 高速かつ強力なドキュメントフォールトトレランス | C言語ライブラリが必要です |
lxml XML パーサー | BeautifulSoup(マークアップ,“xml”); BeautifulSoup(“lxml”,“xml”) | 高速、XML をサポートする唯一のパーサー | C言語ライブラリが必要です |
html5lib | BeautifulSoup(マークアップ、「html5lib」) | 最高の耐障害性 | 遅い |
美しいスープ
●使用例:
BeautifulSoup(url.text,'html.parser') # "url.text"为被解析内容,"html.parser"为解析器
このうち、最初のパラメータは解析する必要がある内容、2 番目のパラメータは使用する必要があるパーサーです。
ノードの検索
検索には find と find_all の 2 つの方法があります
● 記述形式 find("検索したいタグ名", attrs={属性: 属性名} ) 使用例:
# 查找单个标签
html.find("div",attrs={
"class":"v7W49e"})
html.find_all("div",attrs={
"class":"v7W49e"})
# 查找多个标签
html.find_all([a,h3])
# 查找ul标签下的所有a标签
html.find("ul",attrs={
"class":"v7W49e"}).find_all('a')
テキストを取得する
-
bs4 のラベル内のテキストを取得するには、一般的に 2 つの方法が使用されます。
方法 説明する 文章 get_text()
は Beautiful Soup オブジェクトのメソッドで、指定されたタグとそのサブタグ内のすべてのテキスト コンテンツを取得し、それらを文字列にマージするために使用されます。タグに複数のサブタグが含まれている場合、get_text()
はサブタグ間の区切り文字を保持せずに、テキストの内容を 1 つの文字列に結合します。get_text()
の呼び出しメソッドはp.get_text()
です。p
は Beautiful Soup オブジェクト によって見つかった特定のタグです。a.get_text() text
は Beautiful Soup タグ オブジェクトの属性で、サブタグ内のテキスト コンテンツを除いて、タグに直接含まれるテキスト コンテンツを取得するために使用されます。タグに複数のサブタグが含まれている場合、text
は、サブタグのテキスト コンテンツを除き、タグに直接含まれるテキスト コンテンツのみを返します。text
の呼び出しメソッドはp.text
です。ここでp
は Beautiful Soup オブジェクトによって見つかった特定のタグです。 -
例:
<p> 这是一个段落。 <strong>粗体文本</strong> <em>斜体文本</em> </p>
使用
p.get_text()
すると、結合されたテキスト コンテンツが取得されます。这是一个段落。粗体文本斜体文本
p.text
段落タグに直接含まれるテキスト コンテンツのみが取得されます。这是一个段落。
サブタグ内のテキスト コンテンツは
p.text
には含まれません。
属性値を取得します。
BeautifulSoup4 (bs4) では、タグの属性値を取得するために次の 2 つのメソッドを使用できます。
- 使用
tag.get(attribute)
メソッド: このメソッドは、タグの指定された属性値を取得できます。プロパティが存在しない場合は、None
を返します。 tag['attribute']
またはtag.attribute
を使用する: 角括弧またはピリオドを使用してタグの属性値を直接取得します。属性が存在しない場合、角括弧を使用するとエラーが報告され、ドットを使用するとNone
が返されます。
- 例:
<a class="link" href="xxx.xxx.xxx" target="_blank">Example Website</a>
Python を使用して a タグ内の属性を抽出するherf
from bs4 import BeautifulSoup
data = '<a class="link" href="xxx.xxx.xxx" target="_blank">Example Website</a>'
# 使用 BeautifulSoup 解析 HTML
soup = BeautifulSoup(data, 'html.parser')
# 使用 get 方法获取属性值
tag = soup.find('a')
value = tag.get('href')
print(value)
# 使用方括号获取属性值
brackets = tag['href']
print(brackets)
# 使用点号获取属性值
dot = tag.href
print(dot)
注: 指定された属性がタグに存在しない場合、角括弧を使用するとエラーが報告されますが、
get()
メソッドまたはピリオド メソッドを使用すると < i=2>。したがって、角括弧を使用して属性値を取得する前に、その属性が存在することを確認するか、 メソッドを使用して属性値を安全に取得することをお勧めします。None
get()