ホームページ  >  記事  >  バックエンド開発  >  Scrapy フレームワークとデータベースの統合: 動的データ ストレージを実装するにはどうすればよいですか?

Scrapy フレームワークとデータベースの統合: 動的データ ストレージを実装するにはどうすればよいですか?

PHPz
PHPzオリジナル
2023-06-22 10:35:191226ブラウズ

インターネット データの量が増加し続けるにつれて、データを迅速かつ正確にクロール、処理、保存する方法がインターネット アプリケーション開発における重要な問題となっています。 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。