インターネット データの量が増加し続けるにつれて、データを迅速かつ正確にクロール、処理、保存する方法がインターネット アプリケーション開発における重要な問題となっています。 Scrapy フレームワークは、効率的なクローラ フレームワークとして、その柔軟で高速なクローリング方法により、さまざまなデータ クローリング シナリオで広く使用されています。
ただし、クロールされたデータをファイルに保存するだけでは、ほとんどのアプリケーションのニーズを満たすことができません。現在のアプリケーションでは、ほとんどのデータがデータベースを通じて保存、取得、操作されるためです。したがって、Scrapy フレームワークをデータベースと統合して、データの高速かつ動的なストレージを実現する方法が新たな課題となっています。
この記事では、実際のケースを組み合わせて、Scrapy フレームワークがデータベースを統合し、必要な読者が参照できるように動的データ ストレージを実装する方法を紹介します。
1. 準備
導入の前に、この記事の読者は Python 言語の基本知識と Scrapy フレームワークの使用方法をすでに理解していることを前提としています。 Python 言語を使用して簡単なデータベースを作成します。よく分からない場合は、関連する知識を学んでからこの記事を読むことをお勧めします。
2. データベースの選択
Scrapy フレームワークとデータベースの統合を開始する前に、クロールしたデータを保存する適切なデータベースを選択する必要があります。現在一般的に使用されているデータベースには、MySQL、PostgreSQL、MongoDB、その他多くのオプションが含まれます。
これらのデータベースにはそれぞれ長所と短所があるため、必要に応じて選択できます。たとえば、データ量が少ない場合には MySQL データベースを使用する方が便利ですが、大規模なデータ ストレージが必要な場合には MongoDB のドキュメント データベースが適しています。
3. データベース接続情報の設定
特定の操作を行う前に、データベース接続情報を設定する必要があります。たとえば、MySQL データベースを例に挙げると、Python の pymysql ライブラリを使用して接続できます。
Scrapy では、通常、settings.py で設定します:
MYSQL_HOST = 'localhost' MYSQL_PORT = 3306 MYSQL_USER = 'root' MYSQL_PASSWORD = '123456' MYSQL_DBNAME = 'scrapy_demo'
上記の設定では、MySQL データベースが配置されているホスト名、ポート番号、ユーザー名、パスワードを設定します。データベース名などの情報は、実際の状況に応じて変更する必要があります。
4. データ ストレージ パイプラインの作成
Scrapy では、データ ストレージ パイプラインがデータ ストレージを実現するための鍵となります。 Pipeline クラスを作成し、それを Scrapy 構成ファイルに設定してデータを保存する必要があります。
MySQL へのストレージを例として、MySQLPipeline クラスを次のように記述できます。
import pymysql class MySQLPipeline(object): def open_spider(self, spider): self.conn = pymysql.connect(host=spider.settings.get('MYSQL_HOST'), port=spider.settings.get('MYSQL_PORT'), user=spider.settings.get('MYSQL_USER'), password=spider.settings.get('MYSQL_PASSWORD'), db=spider.settings.get('MYSQL_DBNAME')) self.cur = self.conn.cursor() def close_spider(self, spider): self.conn.close() def process_item(self, item, spider): sql = 'INSERT INTO articles(title, url, content) VALUES(%s, %s, %s)' self.cur.execute(sql, (item['title'], item['url'], item['content'])) self.conn.commit() return item
上記のコードでは、MySQL データベースとのドッキングを実装する MySQLPipeline クラスを定義します。メソッド open_spider、close_spider、および process_item が定義されています。
open_spider メソッドは、クローラー全体が実行を開始してデータベース接続を初期化するときに呼び出され、close_spider メソッドはクローラーが終了してデータベース接続を閉じるときに呼び出されます。 Process_item は、データをデータベースに保存するためにデータがクロールされるたびに呼び出されるメソッドです。
5. Pipeline を有効にする
Pipeline の作成が完了したら、Scrapy の設定ファイル settings.py でもパイプラインを有効にする必要があります。以下に示すように、Pipeline クラスを ITEM_PIPELINES 変数に追加するだけです。
ITEM_PIPELINES = { 'myproject.pipelines.MySQLPipeline': 300, }
上記のコードでは、MySQLPipeline クラスを ITEM_PIPELINES 変数に追加し、優先度を 300 に設定して、項目が処理されていることを示します。 Pipeline クラスは 3 番目に呼び出されます。
6. テストと操作
すべての設定が完了したら、Scrapy クローラーを実行し、キャプチャしたデータを MySQL データベースに保存できます。具体的な手順とコマンドは次のとおりです:
1. Scrapy プロジェクトが存在するディレクトリに移動し、次のコマンドを実行して Scrapy プロジェクトを作成します:
scrapy startproject myproject
2. スパイダーを作成して、 Scrapy フレームワークのデータ ストレージ機能をテストし、クロールされたデータをデータベースに保存します。 myproject ディレクトリで次のコマンドを実行します。
scrapy genspider test_spider baidu.com
上記のコマンドは、Baidu をクロールするための test_spider という名前のスパイダーを生成します。
3. Spider コードを作成します。test_sprider ディレクトリの Spiders ディレクトリで、test_sprider.py を開いてクローラー コードを作成します:
import scrapy from myproject.items import ArticleItem class TestSpider(scrapy.Spider): name = "test" allowed_domains = ["baidu.com"] start_urls = [ "https://www.baidu.com", ] def parse(self, response): item = ArticleItem() item['title'] = 'MySQL Pipeline测试' item['url'] = response.url item['content'] = 'Scrapy框架与MySQL数据库整合测试' yield item
上記のコードでは、TestSpider クラスを定義します。 Scrapy から継承 組み込みの Spider クラスは、クローラー ロジックを処理するために使用されます。 parse メソッドでは、Item オブジェクトを構築し、「content」、「url」、「title」の 3 つのキーワードを設定します。
4. myproject ディレクトリに項目ファイルを作成してデータ モデルを定義します:
import scrapy class ArticleItem(scrapy.Item): title = scrapy.Field() url = scrapy.Field() content = scrapy.Field()
上記のコードでは、クロールされた記事データを保存するための ArticleItem クラスを定義します。
5. テスト コード:
test_spider ディレクトリで、次のコマンドを実行してコードをテストします:
scrapy crawl test
上記のコマンドを実行すると、Scrapy が TestSpider クローラーを開始します。 、Baidu ホームページからキャプチャしたデータを MySQL データベースに保存します。
7. 概要
この記事では、Scrapy フレームワークがどのようにデータベースと統合され、動的データ ストレージを実装するかを簡単に紹介します。この記事が困っている読者に役立つことを願っています。また、読者が実際のニーズに応じて開発して、より効率的で高速な動的データ ストレージ機能を実現できることを願っています。
以上がScrapy フレームワークとデータベースの統合: 動的データ ストレージを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。