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を表示させることができました。

コメント