私は最近 Python を学習しており、Python を使用してデータをキャプチャする方法も学んでいるので、非常に人気のある Python クロール フレームワークである Scrapy を発見しました。このツールをより有効に活用するために、Scrapy のアーキテクチャを学びましょう。
1. 概要
次の図は、Scrapy の一般的なアーキテクチャを示しています。これには、主要コンポーネントとシステムのデータ処理プロセス (緑色の矢印で示されている) が含まれます。各コンポーネントの役割とデータ処理プロセスを一つずつ説明しましょう。
2. コンポーネント
1. Scrapy エンジン
Scrapy エンジンは、システム全体のデータ処理プロセスを制御し、トランザクション処理をトリガーするために使用されます。詳細については、以下のデータ処理プロセスをご覧ください。
2. スケジューラ
スケジューラは、Scrapy エンジンからリクエストを受け取り、キューに並べ替え、Scrapy エンジンがリクエストを発行した後にそれらを返します。
3. ダウンローダー
ダウンローダーの主な役割は、Web ページをクロールし、Web コンテンツを Spider に返すことです。
4. スパイダー
スパイダーは、Web ページを解析し、指定された URL によって返されたコンテンツをクロールするために Scrapy ユーザー自身によって定義されたクラスです。各スパイダーは、ドメイン名またはドメイン名のグループを処理できます。つまり、特定の Web サイトのクロールと解析のルールを定義するために使用されます。
スパイダーのクロールプロセス全体 (サイクル) は次のとおりです:
1) まず、最初の URL に対する最初のリクエストを取得し、リクエストが返されたときにコールバック関数を呼び出します。最初のリクエストは、start_requests() メソッドを呼び出すことによって行われます。このメソッドは、デフォルトで start_urls の URL からリクエストを生成し、解析を実行してコールバック関数を呼び出します。
2).コールバック関数では、Web ページの応答を解析し、アイテム オブジェクト、リクエスト オブジェクト、またはその両方の反復を返すことができます。これらのリクエストにはコールバックも含まれており、Scrapy によってダウンロードされ、指定されたコールバックで処理されます。
3). コールバック関数では、Xpath セレクターを使用して Web サイトのコンテンツを解析し (ただし、BeautifuSoup、lxml、またはその他の任意のプログラムを使用することもできます)、解析されたデータ項目を生成します。
4) 最後に、スパイダーから返されたプロジェクトは通常、プロジェクト パイプラインに送られます。
5. アイテム パイプライン
プロジェクト パイプラインの主な責任は、スパイダーによって Web ページから抽出されたアイテムを処理することです。彼の主なタスクは、データを明確にし、検証し、保存することです。ページがスパイダーによって解析されると、ページはプロジェクト パイプラインに送信され、データはいくつかの特定のシーケンスを通じて処理されます。各プロジェクト パイプラインのコンポーネントは、単純なメソッドを備えた Python クラスです。彼らはプロジェクトを取得してアプローチを実行しますが、プロジェクト パイプラインの次のステップに進む必要があるか、処理せずに破棄する必要があるかを判断する必要もあります。
プロジェクト パイプラインは通常、次のプロセスを実行します:
1) 解析されたデータを確認します (プロジェクトに必要なフィールドが含まれているかどうかを確認します)
3)。重複しています) )
4). 解析されたデータをデータベースに保存します
6. ダウンローダーミドルウェア
ダウンロードミドルウェアは、主にリクエストとレスポンスを処理する、Scrapy エンジンとダウンローダーの間に位置するフックフレームワークです。 Scrapy エンジンとダウンローダーの間。これは、Scrapy の機能を拡張するためのカスタム コード方法を提供します。ダウンロード ブローカーは、リクエストとレスポンスを処理するフック フレームワークです。これは、Scrapy をグローバルに制御できる軽量の低レベル システムです。7. Spider ミドルウェア (Spider ミドルウェア)
Spider ミドルウェアは、Scrapy エンジンとスパイダー間のフック フレームワークで、スパイダーの応答入力と要求出力を処理します。これは、カスタム コードを使用して Scrapy の機能を拡張する方法を提供します。スパイダー ミドルウェアは、Scrapy のスパイダー処理メカニズムにフックするフレームワークで、スパイダーに送信されたリクエストを処理し、スパイダーが取得した応答コンテンツとアイテムを返すカスタム コードを挿入できます。8. スケジューラミドルウェア (スケジューリングミドルウェア)
スケジューリングミドルウェアは、Scrapy エンジンとスケジューラの間のミドルウェアであり、Scrapy エンジンからスケジューラに送信されるリクエストと応答を処理することです。彼は、Scrapy の機能を拡張するカスタム コードを提供しています。3. データ処理プロセス
Scrapy のデータ処理プロセス全体は Scrapy エンジンによって制御され、その主な操作方法は次のとおりです。エンジンはドメイン名を開き、スパイダーはそのドメイン名を処理し、最初にクロールされた URL を取得します。
エンジンはクロールする必要がある最初の URL をスパイダーから取得し、それをスケジュール内のリクエストとしてスケジュールします。
エンジンは、スケジューラからクロールする次のページを取得します。
スケジュールは次にクロールされた URL をエンジンに返し、エンジンはそれをダウンロード ミドルウェアを通じてダウンローダーに送信します。
Web ページがダウンローダーによってダウンロードされると、応答コンテンツがダウンロード ミドルウェアを通じてエンジンに送信されます。
エンジンはダウンローダーから応答を受信し、処理のためにスパイダー ミドルウェアを通じてスパイダーに送信します。
スパイダーは応答を処理してクロールされたアイテムを返し、その後新しいリクエストをエンジンに送信します。
エンジンはプロジェクト パイプラインをキャプチャし、スケジューラにリクエストを送信します。
システムは、スケジュール内のリクエストがなくなるまで 2 番目のステップに続く操作を繰り返し、その後エンジンをドメインから切断します。
4. ドライバー
Scrapy は、Twisted によって作成された人気の Python イベント駆動型ネットワーク フレームワークであり、ノンブロッキングの非同期処理を使用します。
以上がこの記事の全内容です。皆さんの学習に役立つことを願っています。また、皆さんも PHP 中国語 Web サイトをサポートしていただければ幸いです。
Python クロール フレームワーク Scrapy のアーキテクチャに関連するその他の記事については、PHP 中国語 Web サイトに注目してください。