ホームページ >バックエンド開発 >Python チュートリアル >Scrapy を使用して Zhihu データをクロールするにはどうすればよいですか?

Scrapy を使用して Zhihu データをクロールするにはどうすればよいですか?

王林
王林オリジナル
2023-06-22 14:51:151734ブラウズ

Scrapy は、インターネット上のさまざまなデータを簡単に取得できる Python Web クローラー ツールです。 Zhihu は人気のあるソーシャル質問と回答のプラットフォームです。Scrapy を使用して、Zhihu 上の質問、回答、ユーザー情報、その他のデータをすばやく取得します。この記事では、Scrapy を使用して Zhihu データをクロールする方法を紹介します。

  1. Scrapy のインストール

まず、Scrapy をインストールする必要があります。 pip コマンドを使用して直接インストールできます。

pip install scrapy
  1. Scrapy プロジェクトの作成

ターミナルで Scrapy プロジェクトを作成するディレクトリを入力し、次のコマンドを使用してプロジェクトを作成します:

scrapy startproject zhihu

このコマンドは、現在のディレクトリに「zhihu」という名前の Scrapy プロジェクトを作成します。

  1. スパイダーの作成

次のコマンドを使用して、プロジェクト ディレクトリに「zhihu_spider.py」という名前のスパイダー ファイルを作成します。

scrapy genspider zhihu_spider zhihu.com

このコマンドは、プロジェクト ディレクトリの "spiders" サブディレクトリに "zhihu_spider.py" ファイルを作成します。このファイルには、zhihu.com を開始 URL とする Spider が含まれています。

  1. Spider コードの作成

「zhihu_spider.py」ファイルを開いて次のコードを追加します:

import scrapy

class ZhihuSpider(scrapy.Spider):
    name = 'zhihu'
    allowed_domains = ['zhihu.com']
    start_urls = ['https://www.zhihu.com/']

    def parse(self, response):
        pass

コードは「ZhihuSpider」という名前のファイルを定義します。 「スパイダークラス。 Spider クラスは次の属性を定義する必要があります:

  • name: スパイダー名
  • allowed_domains: アクセスされたドメイン名
  • start_urls: スパイダーの開始 URL

この例では、Spider の開始 URL は zhihu.com に設定されます。 Spider には、応答によって返されたデータを処理するための「parse」と呼ばれるメソッドも含める必要があります。この例では、「parse」メソッドがまだ実装されていないため、空の「pass」ステートメントが最初に追加されます。

  1. ページ データの解析

Spider の作成が完了したら、ページ データを解析するコードを追加する必要があります。 「parse」メソッドでは、次のコードを使用します。

def parse(self, response):
        questions = response.css('div[data-type="question"]')
        for question in questions:
            yield {
                'question': question.css('h2 a::text').get(),
                'link': question.css('h2 a::attr(href)').get(),
                'answers': question.css('div.zm-item-answer::text').getall(),
            }

このコードは、「question」のない「data-type」属性を含むページ内の div 要素を取得します。次に、各 div 要素をループして、質問のタイトル、リンク、および回答リストを抽出します。

上記のコードでは、「yield」は Python 言語のキーワードであり、ジェネレーターを生成するために使用されます。ジェネレーターは要素を含む反復子であり、各要素が返された後、その要素の位置で実行が一時停止されます。 Scrapy では、「yield」キーワードは、ページから解析されたデータを Scrapy に返すために使用されます。

  1. クローラーの実行

コードの作成が完了したら、次のコマンドを使用してターミナルでクローラーを実行します。

scrapy crawl zhihu

このコマンドは、 Scrapy フレームワークを起動し、Zhihu データのクロールを開始します。 Scrapy は Spider で指定された開始 URL に自動的にアクセスし、返されたページ データを「parse」メソッドを通じて解析します。解析されたデータが端末に出力されます。データを保存する必要がある場合は、CSV、JSON などのファイルにデータを保存できます。

  1. ユーザー データのクロール

上記のコードは、質問や回答などのデータのみをクロールできますが、ユーザー情報を取得することはできません。ユーザーデータをクロールする必要がある場合は、Zhihu の API インターフェイスを使用する必要があります。 Spider では、次のコードを使用して、API インターフェイスから返される JSON 形式のデータを取得できます。

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'}
url = f'https://www.zhihu.com/api/v4/members/{user}?include=following_count,follower_count,badge[?(type=best_answerer)].topics&limit=20'
yield scrapy.Request(url, headers=headers, callback=self.parse_user)

このコードは、指定されたユーザー情報を API インターフェイスから取得します。ここでは、f-string 形式の文字列を使用して、取得するユーザーのユーザー名を URL に挿入します。

コールバック関数で、次のコードを使用して、JSON 形式のデータから必要なデータを抽出します。

def parse_user(self, response):
        data = json.loads(response.body)['data']
        following_count = data['following_count']
        follower_count = data['follower_count']
        best_answerer = data['badge'][0]['topics']
        yield {
            'user_id': data['id'],
            'name': data['name'],
            'headline': data['headline'],
            'following_count': following_count,
            'follower_count': follower_count,
            'best_answerer': best_answerer,
        }

このコードは、JSON からユーザー ID、ユーザーのニックネーム、アバター、およびフォローを抽出します。データ数、ファン数、ベストアンサーの質問などのデータ。

  1. 概要

この記事では、Scrapy を使用して Zhihu データをクロールする方法を紹介します。まず、Scrapy プロジェクトを作成し、Spider を作成する必要があります。次に、CSS セレクターを使用してページ内のデータを解析し、クロールされたデータをジェネレーターに保存します。最後にCSVやJSONなどのファイルに保存するか、端末に直接出力します。ユーザー データを取得する必要がある場合は、Zhihu API インターフェイスを使用して、JSON データから関連データを抽出できます。

以上がScrapy を使用して Zhihu データをクロールするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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