非同期処理サイトをスクレイピングしてみた。

*不完全な記事です。

目的

ブラウザ上で取得したいサイトを見ていると、非同期処理していることに気づかず、requestsライブラリを使用すると、同期処理されていない部分の情報を取得できなかった。そこで、今回は非同期処理サイトのスクレイピング方法を見つたいと思います。記録のために試行錯誤の順で記事を書いているので、見づらいかもしれません。ご了承ください。

Anacondaでは非同期処理はできない?

はじめに「requests-html」を使用して、スクレイピングを使用としました。実行環境がcondaであるために、以下のコードをそれぞれ「anaconda propmt」で実行してみましたが、うまくインストールできませんでした。

conda install requests-html
python -m conda install requests-html
conda install -c conda-forge requests-html

当然、「jupyter lab」で「from requests_html import AsyncHTMLSession」と実行してもインストールできていないため、エラーメッセージが出ます。

そして、conda環境ではオススメされていないのですが、「pip install requests-html」を「anaconda prompt」で実行しました。すると、うまくインストールできたようです。

asyncio

「async」の読み方は「エイシンク」なんだそうです。「asynchronous(エイシンクネス」:非同期」という意味。「cio」が何かはわかりません。「asyncio」の読み方は「エイシンシオ」として先に進みます。

「asyncio」はコルーチンと呼ばれる軽量プロセスを使って、非同期処理を実現するそうです。

コルーチン: co-routine)とはプログラミングの構造の一種。サブルーチンがエントリーからリターンまでを一つの処理単位とするのに対し、コルーチンはいったん処理を中断した後、続きから処理を再開できる。接頭辞 co は協調を意味するが、複数のコルーチンが中断・継続により協調動作を行うことによる。

https://ja.wikipedia.org/wiki/%E3%82%B3%E3%83%AB%E3%83%BC%E3%83%81%E3%83%B3

「async def」はコルーチン関数定義である。実行するとコルーチンオブジェクトが返る。コルーチンオブジェクトはイベントループ上でのみ実行可能になります。イベントループとは


○Pythonクローリング&スクレイピング[増補改訂版] -データ収集・解析のための実践開発ガイド p382
python3 の async/awaitを理解する