Python クローラー---BS4 モジュール

正式名: 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 つのメソッドを使用できます。

  1. 使用tag.get(attribute) メソッド: このメソッドは、タグの指定された属性値を取得できます。プロパティが存在しない場合は、None を返します。
  2. 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>。したがって、角括弧を使用して属性値を取得する前に、その属性が存在することを確認するか、 メソッドを使用して属性値を安全に取得することをお勧めします。 Noneget()

おすすめ

転載: blog.csdn.net/m0_55994898/article/details/132147519