ホームページ  >  記事  >  バックエンド開発  >  PHP を使用して、Zhihu の質問と回答を取得するプログラムを実装します。

PHP を使用して、Zhihu の質問と回答を取得するプログラムを実装します。

王林
王林オリジナル
2023-06-13 23:21:21990ブラウズ

Zhihu は非常に人気のある知識共有コミュニティです。多くのユーザーが質の高い質問と回答を多数投稿しています。このコンテンツは、勉強している人や仕事をしている人にとって、問題を解決し、視野を広げるのに非常に役立ちます。このコンテンツを整理して活用したい場合は、スクレイパーを使用して関連データを取得する必要があります。この記事では、PHP を使用して Zhihu の質問と回答をクロールするプログラムを作成する方法を紹介します。

  1. はじめに
    Zhihu は、質問、回答、コラム、トピック、ユーザーなどを含むがこれらに限定されない豊富なコンテンツを備えたプラットフォームです。 Zhihu のデータをクロールすることで、これらのコンテンツの価値をさらに探ることができます。ここでは主に、PHP を使用して Zhihu の質問と回答をクロールする方法を紹介します。
  2. クロールの問題
    まず、クロールの目的を明確にする必要があります。 Zhihu に関する質問には、次の情報が必要です:

質問のタイトル
質問の説明
フォロワー数、閲覧数、質問への回答数
質問タグ
関連する質問
Zhihu の質問には非常に明らかな特徴があります。それは、各質問に固有の URL があるということです。したがって、URL を作成して HTTP リクエストを送信することで、問題に関する情報を取得できます。

以下は PHP コードのデモです:

<?php
$url = 'https://www.zhihu.com/question/36189228';
$html = file_get_contents($url);

$data = array();
preg_match('/<title>(.*?)</title>/', $html, $match);
$data['title'] = $match[1];

preg_match('/<div class="QuestionHeader-detail">(.*?)</div>/', $html, $match);
$data['description'] = $match[1];

preg_match('/<div class="NumberBoard-value">(.*?)</div><span class="NumberBoard-label">关注者</span>/', $html, $match);
$data['followers'] = $match[1];

preg_match('/<div class="NumberBoard-value">(.*?)</div><span class="NumberBoard-label">浏览</span>/', $html, $match);
$data['views'] = $match[1];

preg_match('/<div class="NumberBoard-value">(.*?)</div><div class="NumberBoard-label">回答</div>/', $html, $match);
$data['answers'] = $match[1];

preg_match_all('/<a href="/topic/(.*?)">(.*?)</a>/', $html, $matches);
$data['tags'] = implode(',', $matches[2]);

preg_match_all('/<a class="RelatedQuestionItem-title" href="(.*?)" target="_blank">(.*?)</a>/', $html, $matches);
$data['related_questions'] = array_combine($matches[1], $matches[2]);

echo json_encode($data, JSON_UNESCAPED_UNICODE);

ここでは、HTML テキスト内の必要な情報を照合するために PHP の正規表現が使用されています。この方法は HTML ページの構造に依存しますが、通常、ほとんどの場合、必要なデータを取得できます。簡単なコードを通じて、この問題に関するさまざまな情報を取得できることがわかります。

  1. 回答キャプチャ
    Zhihu に関する回答には、次の情報が必要です:

回答の作成者
回答の内容
回答「いいね!」とコメントの数
各回答について、URL を構築して HTTP リクエストを送信することで、関連情報を取得することもできます。

以下は PHP コードのデモです:

<?php
$url = 'https://www.zhihu.com/question/36189228/answer/243147352';
$html = file_get_contents($url);

$data = array();
preg_match('/<meta itemprop="name" content="(.*?)">/', $html, $match);
$data['author'] = $match[1];

preg_match('/<div class="RichText ztext">(.*?)</div>/', $html, $match);
$data['content'] = $match[1];

preg_match('/<button class="Button VoteButton VoteButton--up" aria-pressed="false" tabindex="0" aria-label="(.*?)">/', $html, $match);
$data['upvotes'] = $match[1];

preg_match('/<button class="Button CommentButton" tabindex="0" aria-label="(.*?)">/', $html, $match);
$data['comments'] = $match[1];

echo json_encode($data, JSON_UNESCAPED_UNICODE);

同様に、PHP の正規表現を使用して、HTML テキスト内の必要な情報を照合しました。回答のコンテンツを取得するには、AnswerItem-content クラスの代わりに ztext を使用する必要があることに注意してください。これは、Zhihu がアップデート後に関連する CSS クラス名を変更したためです。

  1. 概要
    この記事では、PHP を使用して、Zhihu の質問と回答をキャプチャするプログラムを作成する方法を紹介します。必要に応じてさまざまな情報を取得し、Zhihu上のコンテンツを総合的に分析して活用することができます。 PHP 開発者にとって、これはデータ分析、検索エンジンの最適化、その他の作業面で使用できる非常に実践的なスキルです。

以上がPHP を使用して、Zhihu の質問と回答を取得するプログラムを実装します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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