Zhihu は非常に人気のある知識共有コミュニティです。多くのユーザーが質の高い質問と回答を多数投稿しています。このコンテンツは、勉強している人や仕事をしている人にとって、問題を解決し、視野を広げるのに非常に役立ちます。このコンテンツを整理して活用したい場合は、スクレイパーを使用して関連データを取得する必要があります。この記事では、PHP を使用して 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 ページの構造に依存しますが、通常、ほとんどの場合、必要なデータを取得できます。簡単なコードを通じて、この問題に関するさまざまな情報を取得できることがわかります。
回答の作成者
回答の内容
回答「いいね!」とコメントの数
各回答について、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 クラス名を変更したためです。
以上がPHP を使用して、Zhihu の質問と回答を取得するプログラムを実装します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。