Skip to content

Beautiful Soup#

How to use#

Beautiful Soupは、Pythonのパーサーライブラリであり、HTMLやXMLなどのマークアップ言語からデータを抽出するために使用されます。

以下にBeautiful Soupの基本的な使い方の例を示します。

まず、Beautiful Soupをインストールする必要があります。pipを使用してインストールできます。

pip install beautifulsoup4

インストールが完了したら、次のようにBeautiful Soupを使用してデータを抽出できます。

from bs4 import BeautifulSoup

# 解析するHTMLデータ
html_data = '''
<html>
<body>
    <h1>Beautiful Soupの基本的な使い方</h1>
    <p>Beautiful SoupはPythonのパーサーライブラリで、HTMLやXMLなどのマークアップ言語からデータを抽出するために使用されます。</p>
    <ul>
        <li>データの抽出</li>
        <li>タグの検索</li>
        <li>属性の抽出</li>
    </ul>
</body>
</html>
'''

# BeautifulSoupオブジェクトを作成
soup = BeautifulSoup(html_data, 'html.parser')

# タグを検索してデータを抽出する例
title = soup.find('h1').text
print('タイトル:', title)

paragraph = soup.find('p').text
print('段落:', paragraph)

# タグの属性を抽出する例
list_items = soup.find_all('li')
print('リスト項目:')
for item in list_items:
    print(item.text)

このコードでは、Beautiful Soupを使用してHTMLデータを解析し、タグを検索してデータを抽出しています。

findメソッドを使用して単一の要素を取得し、find_allメソッドを使用して複数の要素を取得します。

それぞれの要素からtext属性を使用してテキストデータを取得できます。

この例では、<h1>タグと<p>タグのデータを抽出し、<li>タグのリスト項目を取得して表示しています。

Beautiful Soupには他にもさまざまな機能があり、[]公式ドキュメント(https://www.crummy.com/software/BeautifulSoup/bs4/doc/)を参照

request で データ取得し解析#

BeautifulSoup とrequestsをinstall。lxml はhtml パーサ。

  • pip install beautifulsoup4
  • pip install requests
  • pip install lxml
import requests
import lxml
from bs4 import BeautifulSoup


url = 'https://www.hogehoge.co.jp'
response = requests.get(url)
soup = BeautifulSoup(response.text, "lxml")

メソッド#

メソッド 説明
find() 最初に一致した要素を取得
find_all() 引数に一致する 全ての 要素を取得

正規表現#

取得した要素に対して正規表現で処理する方法はいかのとおり。

import re

elems = soup.find_all(href=re.compile("www.\w+.co.jp/"))
elems

User-Arguments#

この例では、requestsモジュールを使用して指定したURLからHTMLデータを取得しています。 requests.get(url)でGETリクエストを送信し、response.textでHTMLデータを取得します。 その後、Beautiful Soupを使用してHTMLデータを解析し、データを抽出しています。

requestsモジュールを使用してリクエストを送信する際に、ヘッダー情報を調整することで、アクセスを人間が行っているように見せることができます。 headersという変数にヘッダー情報を指定しています。User-Agentヘッダーでは、特定のブラウザ(ここではChrome)でのアクセスと見せかけています。 Accept-Languageヘッダーでは、言語設定を指定しています。

import requests
from bs4 import BeautifulSoup
import lxml

# URLからHTMLデータを取得する関数
def get_html_data(url):
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36',
        'Accept-Language': 'en-US,en;q=0.9',
    }
    response = requests.get(url, headers=headers)
    html_data = response.text
    return html_data

# 解析するウェブページのURLを指定
url = 'https://example.com'
html_data = get_html_data(url)

# BeautifulSoupオブジェクトを作成(lxmlパーサーを使用)
soup = BeautifulSoup(html_data, 'lxml')

# タグを検索してデータを抽出する例
title = soup.find('h1').text
print('タイトル:', title)

paragraph = soup.find('p').text
print('段落:', paragraph)

# タグの属性を抽出する例
list_items = soup.find_all('li')
print('リスト項目:')
for item in list_items:
    print(item.text)

上記のコードでは、get_html_dataという関数を定義し、リクエストを送信してHTMLデータを取得しています。 その後、取得したHTMLデータをBeautiful Soupで解析してデータを抽出しています。

必要なURLを指定して、get_html_data関数を呼び出すことで、アクセスを人間が行っているように見せながらHTMLデータを取得し、Beautiful Soupで解析することができます。

また、BeautifulSoupの引数に'lxml'を指定しています。これにより、lxmlパーサーが使用されます。

参考#