Pythonの非同期処理を利用して複数のWebサイトからデータをJSONファイルとして書き込み

スポンサーリンク

Pythonの非同期処理を利用して複数のWebサイトからデータをJSONファイルとして書き込み、またはデータを表示してみます。

■今回の環境(Python)

今回のPythonはバージョン3.8.5を用いる。(Mac OS)

■非同期処理を利用して複数のWebサイトからデータをJSONファイルとして書き込み

では、早速非同期処理を利用して複数のWebサイトからデータをJSONファイルとして書き込み、またはデータの表示をするスクリプトを書いていきます。

■コード

import asyncio
import aiohttp
import simplejson as json

# 非同期関数
async def fetch_data(session, url):
    async with session.get(url) as response:
        data = await response.text()
        print(f"データ取得完了: {url}")
        return data

# メイン関数
async def main():
    # セッションの作成
    async with aiohttp.ClientSession() as session:
        # 非同期処理の並行実行
        urls = [
            "https://www.baidu.com/",
            "https://google.com",
            "https://yahoo.co.jp",
        ]
        tasks = [fetch_data(session, url) for url in urls]
        results = await asyncio.gather(*tasks)
        print("取得したデータ:")
        for url, data in zip(urls, results):
            print(f"{url}: {data[:50]}...")

        # データをJSONファイルに書き込む
        json_data = {url: data for url, data in zip(urls, results)}
        with open("data.json", "w") as f:
            json.dump(json_data, f,ensure_ascii=False)

# イベントループの作成と実行
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
loop.close()

まずはモジュールのインポートします。今回はasyncio、aiohttp、および simplejson(jsonとしてインポートされています)モジュールをインポートします。これらのモジュールは非同期処理とHTTPクライアント、およびJSON操作のために使用されます。

次にfetch_data非同期関数を定義します。これは指定されたURLからデータを非同期に取得するための関数です。sessionオブジェクトを使用してURLにGETリクエストを送信し、レスポンスのテキストデータを取得します。そして、取得したデータを返します。

次にmain非同期関数を定義します。メインの非同期処理関数です。aiohttp.ClientSessionオブジェクトを作成してセッションを確立し、複数のURLに対して非同期処理を並行して実行します。fetch_data関数を使用して各URLからデータを取得し、結果をリストに格納します。取得したデータと対応するURLを表示します。

次にデータのJSONファイルへの書き込みを行います。取得したデータをJSON形式の辞書に格納します。各URLをキー、対応するデータを値として持ちます。with open(“data.json”, “w”) as f:を使用して、ファイル名が”data.json”で書き込みモードでファイルを開きます。json.dumpを使用して、辞書のデータをJSONファイルに書き込みます。ensure_ascii=Falseとすることで、日本語文字をそのままの形式で書き込むことができます。

次にイベントループの作成と実行を行います。asyncio.get_event_loopを使用してイベントループを取得し、main関数をloop.run_until_completeに渡して非同期処理を実行します。最後に、イベントループをクローズします。

■実行・検証

このスクリプトを「multiple_website_s.py」という名前で、Pythonが実行されている作業ディレクトリ(カレントディレクトリ)に保存し、ターミナルから実行してみます。

実行してみると、非同期処理によって、今回指定した複数のURLからデータが取得され、取得したデータがターミナルに表示されます。また、取得したデータはJSONファイルに書き込まれます。

書き込み後、Pythonが実行されている作業ディレクトリ(カレントディレクトリ)を確認すると今回は「data.json」という名前でJSON形式のファイルが生成されていることが確認できました。

コメント

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