ホームページ >バックエンド開発 >Python チュートリアル >Scrapy の動作: Douban 映画データのクロールと評価人気ランキング

Scrapy の動作: Douban 映画データのクロールと評価人気ランキング

WBOY
WBOYオリジナル
2023-06-22 13:49:402459ブラウズ

Scrapy は、データを迅速かつ効率的にクロールするためのオープンソース Python フレームワークです。この記事では、Scrapy を使用して Douban 映画のデータと評価の人気をクロールします。

  1. 準備

まず、Scrapyをインストールする必要があります。コマンド ラインで次のコマンドを入力すると、Scrapy をインストールできます:

pip install scrapy

次に、Scrapy プロジェクトを作成します。コマンド ラインで、次のコマンドを入力します。

scrapy startproject doubanmovie

これにより、doubanmovie という名前の Scrapy プロジェクトが作成されます。次に、プロジェクト ディレクトリに移動し、douban.py という名前のスパイダーを作成します。コマンド ラインで、次のコマンドを入力します。

cd doubanmovie
scrapy genspider douban douban.com

これで、Spider を使用できるようになりました。次に、必要なデータを取得するためのスパイダーの動作を定義します。

  1. 動画データのクロール

Spider を使用して Douban の動画データをクロールします。具体的には、次の情報を取得します:

  • 映画名
  • 監督
  • 俳優
  • タイプ
  • 言語
  • リリース日
  • 長さ
  • 評価
  • レビューアーの数

douban.pyファイルを開くに、次のコードを追加します。

import scrapy

class DoubanSpider(scrapy.Spider):
    name = 'douban'
    allowed_domains = ['douban.com']
    start_urls = ['https://movie.douban.com/top250']

    def parse(self, response):
        movie_list = response.xpath('//div[@class="item"]')
        for movie in movie_list:
            yield {
                'name': movie.xpath('.//span[@class="title"]/text()').get(),
                'director': movie.xpath('.//div[@class="bd"]/p/text()[1]').get(),
                'actors': movie.xpath('.//div[@class="bd"]/p/text()[2]').get(),
                'genre': movie.xpath('.//div[@class="bd"]/p/text()[3]').get(),
                'country': movie.xpath('.//div[@class="bd"]/p/text()[4]').get(),
                'language': movie.xpath('.//div[@class="bd"]/p/text()[5]').get(),
                'release_date': movie.xpath('.//div[@class="bd"]/p/text()[6]').get(),
                'duration': movie.xpath('.//div[@class="bd"]/p/text()[7]').get(),
                'rating': movie.xpath('.//span[@class="rating_num"]/text()').get(),
                'num_reviews': movie.xpath('.//div[@class="star"]/span[@class="rating_num"]/text()').get(),
            }

このコードでは、XPath を使用して、取得する必要がある情報を選択します。 yield を使用してこの情報を生成し、return を使用してそれをユーザーに返します。

ここで Spider を実行すると (次のコマンドを実行します:scrapy roll douban)、最初の 250 本の映画のデータがクロールされ、コマンド ラインに返されます。

  1. 評価人気ランキングの取得

これで、上位 250 本の映画データの取得に成功しました。次に、評価人気ランキングを取得します。

Douban 映画の TOP250 リストをクロールするには、まず新しい Spider を作成する必要があります。このリストを使用して映画のランキングを取得します。

douban.py ファイルに次のコードを追加します。

import scrapy

class DoubanSpider(scrapy.Spider):
    name = 'douban'
    allowed_domains = ['douban.com']
    start_urls = ['https://movie.douban.com/top250']

    def parse(self, response):
        movie_list = response.xpath('//div[@class="item"]')
        for movie in movie_list:
            yield {
                'name': movie.xpath('.//span[@class="title"]/text()').get(),
                'director': movie.xpath('.//div[@class="bd"]/p/text()[1]').get(),
                'actors': movie.xpath('.//div[@class="bd"]/p/text()[2]').get(),
                'genre': movie.xpath('.//div[@class="bd"]/p/text()[3]').get(),
                'country': movie.xpath('.//div[@class="bd"]/p/text()[4]').get(),
                'language': movie.xpath('.//div[@class="bd"]/p/text()[5]').get(),
                'release_date': movie.xpath('.//div[@class="bd"]/p/text()[6]').get(),
                'duration': movie.xpath('.//div[@class="bd"]/p/text()[7]').get(),
                'rating': movie.xpath('.//span[@class="rating_num"]/text()').get(),
                'num_reviews': movie.xpath('.//div[@class="star"]/span[@class="rating_num"]/text()').get(),
            }

        next_page = response.xpath('//span[@class="next"]/a/@href')
        if next_page:
            url = response.urljoin(next_page[0].get())
            yield scrapy.Request(url, callback=self.parse)

コードでは、next_page という変数を使用して、最後のページに到達したかどうかを確認します。まだ最後のページに到達していない場合は、次のページまでクロールを続けます。

次に、映画のランキングを取得するために解析メソッドを更新する必要があります。 Python の enumerate 関数を使用して、各映画にランキングを関連付けます。

douban.py ファイルで、元の解析メソッドを置き換えます:

def parse(self, response):
        movie_list = response.xpath('//div[@class="item"]')
        for i, movie in enumerate(movie_list):
            yield {
                'rank': i + 1,
                'name': movie.xpath('.//span[@class="title"]/text()').get(),
                'director': movie.xpath('.//div[@class="bd"]/p/text()[1]').get(),
                'actors': movie.xpath('.//div[@class="bd"]/p/text()[2]').get(),
                'genre': movie.xpath('.//div[@class="bd"]/p/text()[3]').get(),
                'country': movie.xpath('.//div[@class="bd"]/p/text()[4]').get(),
                'language': movie.xpath('.//div[@class="bd"]/p/text()[5]').get(),
                'release_date': movie.xpath('.//div[@class="bd"]/p/text()[6]').get(),
                'duration': movie.xpath('.//div[@class="bd"]/p/text()[7]').get(),
                'rating': movie.xpath('.//span[@class="rating_num"]/text()').get(),
                'num_reviews': movie.xpath('.//div[@class="star"]/span[@class="rating_num"]/text()').get(),
            }

        next_page = response.xpath('//span[@class="next"]/a/@href')
        if next_page:
            url = response.urljoin(next_page[0].get())
            yield scrapy.Request(url, callback=self.parse)

ここで、Spider を再度実行すると、最初の 250 本の映画のデータが取得され、コマンドラインに返されます。この時点で、すべての映画のランキングが表示されます。

  1. 結論

Scrapy は、データを迅速かつ効率的にクロールするための非常に強力で柔軟なツールです。この記事では、Scrapy を使用して、Douban 映画のデータと評価の人気をクロールすることに成功しました。

Python コードと XPath を使用して Web ページ上の情報を選択的に取得し、yield ステートメントを使用してそれをユーザーに返します。プロセス全体を通じて、Scrapy は大量のデータを管理およびクロールするためのシンプルかつ効果的な方法を提供し、データ分析と処理を迅速に実行できるようにします。

以上がScrapy の動作: Douban 映画データのクロールと評価人気ランキングの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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