Pythonを用いてTrioとRequestsモジュールを組み合わせてWebサイトのタイトルを取得する

スポンサーリンク

PythonでTrioとRequestsモジュールを組み合わせてWebサイトのタイトルを取得してみます。

今回はTrio、Requests、bs4(beautifulsoup4)を用います。これらのライブラリ・モジュールはPythonの標準ライブラリではないものもありますので、事前に確認しインストールを行ってください。

■Python

今回のPythonのバージョンは、「3.8.5」を使用しています。(Windows11)

■TrioとRequestsモジュールを組み合わせてWebサイトのタイトルを取得する

では、早速TrioとRequestsモジュールを組み合わせてWebサイトのタイトルを取得するスクリプトを書いていきます。

■コード

import trio
import requests
from bs4 import BeautifulSoup

# 非同期なタスクを定義する関数
async def fetch_title(url):
    print(f"URL: {url}")
    response = requests.get(url)
    response.raise_for_status()
    html = response.text
    soup = BeautifulSoup(html, "html.parser")
    title = soup.title.string
    print(f"タイトル: {title}")

# メインの非同期な関数
async def main():
    async with trio.open_nursery() as nursery:
        # 非同期なタスクを開始します
        nursery.start_soon(fetch_title, "https://www.yahoo.co.jp")
        nursery.start_soon(fetch_title, "https://www.google.com")

# Trioランタイムを起動し、非同期な処理を開始します
trio.run(main)

まずはtrio、requests、およびBeautifulSoupの必要なモジュールをインポートします。

その後、fetch_titleという非同期なタスクを定義します。fetch_title関数内では、指定されたURLからHTMLページを非同期に取得します。requests.getメソッドを使用してリクエストを送信し、responseオブジェクトを取得します。response.raise_for_status()を使用して、レスポンスのステータスコードが正常であるかをチェックします。エラーがある場合、例外が発生します。取得したHTMLデータは、response.textを使用してテキスト形式に変換されます。BeautifulSoupを使用して、HTMLデータをパースし、soupオブジェクトを作成します。soup.title.stringを使用して、HTMLページのタイトルを取得します。取得されたタイトルはprint文を使用して表示されます。

mainというメインの非同期な関数を定義します。このmain関数が呼び出された場合は、trio.open_nurseryがコンテキストマネージャとして使用されます。nursery.start_soonを使用して、fetch_title関数が2回非同期に実行されます。それぞれの呼び出しでは異なるURLが渡されます。今回は、”https://www.yahoo.co.jp”と”https://www.google.com”という2つのURLに対して非同期なタスクが開始されます。

最後に、trio.run(main)を呼び出して、Trioランタイムを起動し、非同期な処理を開始します。これにより、並行して複数の非同期なタスクが実行されます。全ての非同期なタスクが完了すると、Trioランタイムが終了し、プログラムが終了します。

■検証・実行

今回書いたスクリプトを「web_title.py」という名前でPythonが実行されている作業ディレクトリ(カレントディレクトリ)に保存し、コマンドプロンプトから実行してみます。

実行してみると、並行し非同期なタスク(Webサイトのtitleを取得するというタスク)が実行され、取得されたtitleを表示させることができました。

コメント

タイトルとURLをコピーしました