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

王林
リリース: 2023-06-22 14:51:15
オリジナル
1695 人が閲覧しました

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート