概要
Scrapy は、Web サイトデータをスクレイピングするためのオープンソース Python フレームワークです。 Web サイトから必要なデータを抽出するための強力で柔軟なツールのセットを提供します。 Scrapy は Twisted 非同期ネットワーク ライブラリ上に構築されているため、大量の同時リクエストを効率的に処理できます。 Scrapy の主な機能とコンポーネントの一部を次に示します。
-
セレクター: Scrapy は XPath セレクターと CSS セレクターを使用して、Web ページからデータを見つけて抽出します。これにより、HTML または XML ドキュメントを処理するときに必要な情報を見つけて抽出することが非常に便利になります。
-
アイテム: Web ページから抽出される構造化データを定義するコンテナ。カスタムのItem クラスを作成すると、データの構造が標準化され、データ抽出プロセスがより明確になり、保守しやすくなります。
-
パイプライン: パイプラインは、Spider から抽出されたデータを処理するコンポーネントです。カスタム パイプラインを作成することにより、データをクリーニング、検証、保存できます。たとえば、データをデータベースに保存したり、ファイルにエクスポートしたりできます。
-
ミドルウェア: ミドルウェアは、Scrapy のリクエストとレスポンスを処理するフックです。リクエストがサーバーに送信される前、またはサーバーから返された後に、リクエストとレスポンスを変更できます。これにより、プロキシ、ユーザー エージェントなどのさまざまなカスタム機能をクローリング プロセス中に実装できるようになります。
-
ダウンローダー: HTTP リクエストの送信と HTTP レスポンスの受信を処理するコンポーネント。 Scrapy のダウンローダーは同時リクエストをサポートしており、これは設定を通じて構成できます。
-
スケジューラ: Spider がリクエストを送信するタイミングを制御するために使用されるコンポーネント。スケジューラはキューを維持し、データを効率的にクロールするために特定のルールに従って Spider リクエストをスケジュールします。
-
スパイダー ミドルウェア: グローバル ミドルウェアに似ていますが、特にスパイダーのリクエストと応答を処理するために使用されます。
-
プロジェクト: Scrapy プロジェクトは、クローラー、アイテム定義、パイプライン、その他の構成を含む全体的な構造です。 Scrapy プロジェクトには複数のスパイダーを含めることができ、各スパイダーは特定のクロール ルールを定義します。
Scrapy を使用すると、柔軟で効率的でメンテナンスが簡単な Web クローラーを簡単に構築できます。以下は簡単な Scrapy クローラーの例です。
import scrapy
class MySpider(scrapy.Spider):
name = 'my_spider'
start_urls = ['http://example.com']
def parse(self, response):
# 提取数据的代码
title = response.css('h1::text').get()
yield {
'title': title}
上記のコードは、my_spider
という名前の Spider を定義します。開始 URL は http://example.com
で、parse
メソッドでは CSS を使用します。セレクターを使用してページからタイトル データを抽出し、結果を処理のためにパイプラインに渡します。 yield
関連モジュール
Scrapy ライブラリにはいくつかの重要なモジュールが含まれており、それぞれに特定の機能があり、さまざまなタスクに使用されます。以下は、Scrapy ライブラリでよく使用されるモジュールの一部です。
- スクレイピー.スパイダー:
- クローラーの基本構造と動作を定義するために使用されるコア モジュール。
- 開発者は、
scrapy.Spider
を継承するクラスを作成し、開始 URL と、リンクの追跡方法やデータの抽出方法などのルールを定義する必要があります。
import scrapy
class MySpider(scrapy.Spider):
name = 'my_spider'
start_urls = ['http://example.com']
def parse(self, response):
# 爬虫逻辑
- スクレイピー.アイテム:
- Web ページから抽出する必要がある構造化データを定義するために使用されるコンテナー。
- 開発者はカスタムのItem クラスを作成することでデータ構造を標準化します。
import scrapy
class MyItem(scrapy.Item):
title = scrapy.Field()
link = scrapy.Field()
- スクレイピーセレクター:
- Web ページからデータを抽出するツール。XPath および CSS セレクターをサポートします。
- Spider では、
response.css
またはresponse.xpath
を使用して Selector オブジェクトを作成し、対応するセレクター式を使用してデータを抽出できます。
title = response.css('h1::text').get()
- スクレイピー.リクエスト:
- 送信される HTTP リクエストを定義するために使用されるオブジェクト。
- Spider では、
scrapy.Request
を使用してリクエスト オブジェクトを作成し、レスポンスを処理するコールバック関数を指定できます。
yield scrapy.Request(url='http://example.com', callback=self.parse)
- スクレイピー.ItemLoader:
- アイテムをロードするためのツール。アイテム フィールドにデータを入力するための便利な API を提供します。
- Spider で使用して
ItemLoader
データをアイテムにロードできます。
from scrapy.loader import ItemLoader
loader = ItemLoader(item=MyItem(), response=response)
loader.add_css('title', 'h1::text')
loader.add_value('link', response.url)
yield loader.load_item()
- スクレイピー.パイプライン:
- Spiderによって抽出されたデータを処理するためのコンポーネント。
- 開発者は、データを処理、検証、または保存するためのカスタム パイプラインを作成できます。
class MyPipeline:
def process_item(self, item, spider):
# 处理item的逻辑
return item
- スクレイピーの設定:
- Scrapy プロジェクトの構成設定が含まれています。ダウンロード遅延、ミドルウェアなど、プロジェクト内でさまざまなパラメーターを設定できます。
BOT_NAME = 'my_project'
DOWNLOAD_DELAY = 2
- スクレイピー例外:
- クローラーで発生する可能性のある例外を処理するために使用できる、Scrapy ライブラリの例外クラスが含まれています。
from scrapy.exceptions import CloseSpider
raise CloseSpider('Crawling stopped due to a specific condition')
これは、Scrapy ライブラリでよく使用されるいくつかのモジュールの簡単な紹介にすぎません。実際の使用では、開発者は特定のニーズに応じて他のモジュールをさらに理解し、使用して、より強力でカスタマイズされたクローラーを構築できます。