Scrapyザ・パイプラインは、私たちは、多くの場合、実際の開発/検証データ、重複排除やデータストレージをきれいにするためにそれを使用し、プロセスデータへの機能を提供してくれます。パイプラインプロジェクトの様々な存在する、各パイプラインは、いくつかのアイテムの処理方法を含むクラスです。アイテムが順次パイプラインアイテムが破棄場合、後者はパイプラインに行われていない前記パイプラインは、アイテムを受信しない順序で送信されます。
ゼロ、カスタムパイプライン
カスタムパイプラインは、単に指定された方法を達成するために、実際には非常に簡単です。
- process_item(自己、アイテム、クモ)
- 説明:このメソッドは実装される必要があり、データの処理の作業をこの方法で実施される、方法を返す辞書、アイテム、ツイストはDropItemまたは異常を据え置き。
- パラメータ:
- 項目:項目をクロールします。
- クモ:使用スパイダー項目を登るのにかかる時間。
ヒント:アイテムのprocess_item方式の低下場合は、項目項目は、後続のパイプラインに配信されることはありません。
- open_spider(自己、クモ)
- 説明:クローラーが実行を開始には、ファイルを開いて、このようなデータベースを開くと、この方法では、いくつかの初期化を実行されます。
- パラメータ:
- クモ:現在使用中の蜘蛛
- close_spider(自己、クモ)
- 説明:クローラーが閉じている場合、この方法は、そのようなクローズファイルなど、データベースを閉じるように、フォローアップ作業の数で実行されます。
- パラメータ:
- クモ:現在使用中の蜘蛛
- from_crawl(自己、クローラ)
- 説明:メソッドのクラスメソッドクローラを初期化することによって、オブジェクトパイプライン・インスタンスを返します。私たちは、コアコンポーネントScrapyクローラのすべてを戻ることができます。
特別なパイプライン
いくつかのプロジェクトでは、データのクロールページにしたい、だけでなく、ファイルや画像をクロールし、ローカルに保存していないだけ。その後、我々は、パイプラインの特別Scrapy使用する必要があります。FilesPipelineとImagesPipelineを、彼らは同じ方法および構造のいくつかを持って、私たちは、このパイプラインはMediaPipelineで呼び出します。FilesPipeline ImagesPipelineと、以下の機能が含まれています。
- ダウンロードされたデータの回避重複
- 指定された保管場所
ImagesPipelineは、次の機能も含まれています。
- 写真はJPG形式またはRGB形式に変換しました
- サムネイルを生成
- 最大/最小の幅と高さの写真のダウンロード制限
ヒント:Scrapyパイプライン方式を避けるためですと、キューにダウンロードするファイルのURLを複製、および関連すると回答、これ再ダウンロードを避けること。
- FilesPipeline
ワークフローFilesPipelineのダウンロードファイルには、4つのステップの合計は非常に簡単です:
- URL保存爬虫類は、項目を取得しにfile_urlsにファイルをダウンロードしたいです。
- アイテムのクローラは、パイプラインの内部に戻りました。
- 項目FilesPipeline順に転送すると、URLは内蔵のスケジューラとダウンローダにダウンロードされfile_urls。あなたは、ファイルのダウンロードが完了するか、エラーが、アイテムをアンロックしてダウンロードする必要があるまで、この時点では項目がロックされています。
- ダウンロードが完了すると、結果は、ファイル内のファイルの一覧、各データ型の辞書を保存されます。
- ImagesPipeline
ImagesPipelineは、そのステップのほとんどとFilesPipeline同じことを言うことですFilesPipelineから継承されます。唯一の違いは、ImagesPipelineがダウンロードは、画像への結果の保存、完了、image_urls URLに保存された画像をダウンロードする必要がありますです。
ヒント:FilesPipelineとImagesPipelineがより一般的に使用されているため、パイプラインは、だけでなく、これらの二つの特別なパイプラインを含み、私はここで説明しなければならなかったので。その他のパイプラインScrapy構築されますが、特定の文書を見るために公式サイトに行くことができます。
私たちは、あなたがパイプラインを書き終えた後、私たちはパイプラインがScrapyに注入書き込みますsettings.pyファイルに登録する必要があります。
ITEM_PIPELINS= {
'自定义Pipeline 路径':'优先级'
}
第二に、要約
この記事は主に理論的な知識パイプラインに、非常に短いが、しかし、この知識は、知識パイプラインの中核です。次のセクションでは、私は、コードの形式で透けてパイプラインを使用します。