インターネット技術の継続的な発展に伴い、クローラー技術も広く使用されるようになりました。クローラー テクノロジーは、インターネット上のデータを自動的にクロールしてデータベースに保存することができ、データ分析やデータ マイニングに便利です。 Python の非常に有名なクローラー フレームワークである Scrapy には、ターゲット Web サイト上のデータを迅速にクロールし、ローカルまたはクラウド データベースに自動的に保存できるいくつかの一般的なクローラー テンプレートが付属しています。この記事では、Scrapy 独自のクローラー テンプレートを使用してデータをクロールする方法と、クロール プロセス中にデータをクリーニング、解析、保存する方法を紹介します。
1. Scrapy クローラー テンプレートの概要
Scrapy には、基本的な Spider テンプレート、CrawlSpider テンプレート、XmlFeedSpider テンプレートなど、いくつかのクローラー テンプレートが付属しています。 Spider テンプレートは最も基本的なクローラ テンプレートであり、応用範囲が広く、使いやすいことが利点です。 CrawlSpider テンプレートは、マルチレベル リンクを迅速にクロールでき、カスタム ルールをサポートするルールベースのクローラー テンプレートです。 XmlFeedSpider テンプレートは、XML 形式に適したクローラ テンプレートです。データ クローリングにこれらのテンプレートを使用すると、プログラマーの開発の難易度が大幅に軽減され、クローリングの効率が向上します。
2. Scrapy クローラー テンプレート アプリケーション
以下は、Scrapy 独自の Spider テンプレートを使用してデータをクロールする方法を示す実践的な例です。クローリング対象の Web サイトは映画情報サイトであり、Web サイトのトップページに最新の映画情報が掲載されています。この Web サイトから映画の名前、監督、俳優、評価、その他の情報をクロールし、ローカル データベースに保存する必要があります。
まず、コマンド ライン ウィンドウを開き、ターゲットの作業ディレクトリに切り替えて、次のコマンドを入力する必要があります:
scrapy startproject movies
このコマンド Movies という名前の Scrapy プロジェクトが作成されます。プロジェクト ディレクトリには、クローラー プログラムを配置するために使用される Spiders という名前のサブディレクトリが含まれます。
プロジェクト ディレクトリで、次のコマンドを使用して movie_spider という名前のスパイダーを作成します。
scrapy genspider movie_spider www.movies.com
このコマンドは、 Spider テンプレートに基づくプログラム。www.movies.com はターゲット Web サイトのドメイン名を表します。 Spiders ディレクトリに、次の内容を含む movie_spider.py という名前のファイルが表示されます。
import scrapy class MovieSpider(scrapy.Spider): name = 'movie_spider' allowed_domains = ['www.movies.com'] start_urls = ['http://www.movies.com/'] def parse(self, response): pass
これは、最も基本的な Spider プログラムです。このうち、name はクローラーの名前を表し、allowed_domains はクロールを許可するドメイン名のリストを表し、start_urls はクロールを開始する URL のリストを表します。 parse メソッドでは、データの解析と取得のためのコードを記述する必要があります。
応答オブジェクトからターゲット Web サイトのデータをキャプチャして解析するコードを記述する必要があります。先ほど述べた映画情報 Web サイトの場合、XPath または CSS セレクターを使用してページ上の要素を見つけることができます。ムービー名がページ上のクラス movie-name を持つ div 要素に格納されていると仮定すると、次のコードを使用してすべてのムービー名を抽出できます:
def parse(self, response): movies = response.xpath('//div[@class="movie-name"]/text()').extract() for movie in movies: yield {'name': movie}
ここでは、XPath 構文を使用してすべての div を見つけます。クラス movie-name の要素が使用され、extract メソッドを使用して要素内のテキスト コンテンツが抽出されます。次に、for ループを使用して、ジェネレーターの出力として各ムービー名を生成します。
同様に、XPath または CSS セレクターを使用して、関心のある他の要素を見つけることができます。たとえば、監督と俳優の情報はクラス ディレクターの div 要素に格納され、評価情報はクラス レートの div 要素に格納されます。
Spider プログラムでは、キャプチャしたデータをローカルまたはクラウド データベースに保存するコードを記述する必要があります。 Scrapy は、MySQL、PostgreSQL、MongoDB など、さまざまなデータベースへのデータの保存をサポートしています。
たとえば、MySQL データベースを使用して映画情報を保存できます。 Spiders ディレクトリに、次のコードを含む mysql_pipeline.py という名前のファイルを作成できます。
import pymysql class MysqlPipeline(object): def __init__(self): self.conn = pymysql.connect(host='localhost', user='root', passwd='123456', db='movie_db', charset='utf8') def process_item(self, item, spider): cursor = self.conn.cursor() sql = "INSERT INTO movie(name, director, actors, rate) VALUES(%s, %s, %s, %s)" cursor.execute(sql, (item['name'], item['director'], item['actors'], item['rate'])) self.conn.commit() def __del__(self): self.conn.close()
このプログラムは、実装データを MySQL データベースに保存します。ここで、movie_db はデータベース名であり、ムービーテーブルには名前、監督、俳優、評価の 4 つのフィールドが含まれ、映画名、監督、俳優、評価情報を保存します。 process_item メソッドは、Spider プログラムで生成された項目をデータベースに保存するために使用されます。
mysql_pipeline.py ファイルを使用するには、次の設定を settings.py ファイルに追加する必要もあります:
ITEM_PIPELINES = { 'movies.spiders.mysql_pipeline.MysqlPipeline': 300 }
ここで、「movies.spiders.mysql_pipeline.MysqlPipeline」は次のように指定します。 mysql_pipeline.py ファイルの場所とクラス名。 300という数字はデータ処理の優先度を示しており、数字が小さいほど優先度が高くなります。
Spiders ディレクトリで次のコマンドを実行して Scrapy プログラムを実行します:
scrapy crawl movie_spider
このコマンドは movie_spider を開始します。クローラー プログラムはターゲット Web サイトのデータのクロールを開始し、それを MySQL データベースに保存します。
3. 概要
この記事では、Spider テンプレート、CrawlSpider テンプレート、XmlFeedSpider テンプレートなど、Scrapy 独自のクローラー テンプレートを使用してデータをクロールする方法を紹介します。 Spider テンプレートを使用してデータをキャプチャおよび解析し、結果を MySQL データベースに保存する方法を実際の例で説明します。データ収集に Scrapy を使用すると、データ収集の効率と品質が大幅に向上し、その後のデータ分析、データ マイニング、その他の作業を強力にサポートできます。
以上がScrapy は、クローラー テンプレートが付属するデータ スクレイピング アプリケーションです。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。