Maison  >  Article  >  développement back-end  >  Utilisez PHP pour implémenter un programme permettant de capturer les questions et réponses de Zhihu

Utilisez PHP pour implémenter un programme permettant de capturer les questions et réponses de Zhihu

王林
王林original
2023-06-13 23:21:21949parcourir

Zhihu est une communauté de partage de connaissances très populaire. De nombreux utilisateurs ont contribué à un grand nombre de questions et réponses de haute qualité. Pour les personnes qui étudient et travaillent, ce contenu est très utile pour résoudre des problèmes et élargir leurs horizons. Si vous souhaitez organiser et utiliser ce contenu, vous devez utiliser des scrapers pour obtenir des données pertinentes. Cet article explique comment utiliser PHP pour écrire un programme permettant d'explorer les questions et réponses de Zhihu.

  1. Introduction
    Zhihu est une plateforme au contenu très riche, comprenant mais sans s'y limiter des questions, réponses, colonnes, sujets, utilisateurs, etc. Nous pouvons explorer davantage la valeur de ces contenus en explorant les données sur Zhihu. Ici, nous présentons principalement comment utiliser PHP pour explorer les questions et réponses de Zhihu.
  2. Problème d'exploration
    Tout d'abord, nous devons clarifier quel est l'objectif de l'exploration. Pour les questions sur Zhihu, nous avons besoin des informations suivantes :

Titre de la question
Description de la question
Le nombre de followers, de vues et de réponses à la question
Le libellé de la question
Questions connexes
Il y a une question très évidente sur Zhihu La particularité est que chaque question possède une URL unique. Nous pouvons donc obtenir des informations sur le problème en construisant une URL et en envoyant une requête HTTP.

Ce qui suit est une démonstration de code 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);

Les expressions régulières PHP sont utilisées ici pour faire correspondre les informations requises dans le texte HTML. Bien que cette méthode dépende de la structure de la page HTML, elle peut normalement capturer les données requises dans la plupart des cas. On peut voir que grâce à un code simple, nous pouvons obtenir diverses informations sur ce problème.

  1. Exploration des réponses
    Pour les réponses sur Zhihu, nous avons besoin des informations suivantes :

L'auteur de la réponse
Le contenu de la réponse
Le nombre de likes et de commentaires pour la réponse
Pour chaque réponse, nous pouvons également construire une URL Et envoyez une requête HTTP pour obtenir ses informations associées.

Voici une démonstration de code 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);

De même, nous avons utilisé les expressions régulières de PHP pour faire correspondre les informations requises dans le texte HTML. Il convient de noter que pour obtenir le contenu de la réponse, il faut utiliser ztext au lieu de la classe AnswerItem-content. En effet, Zhihu a modifié les noms des classes CSS pertinentes après la mise à jour.

  1. Résumé
    Cet article explique comment utiliser PHP pour écrire un programme permettant d'explorer les questions et réponses de Zhihu. Nous pouvons obtenir différentes informations selon nos besoins et effectuer une analyse et une utilisation complètes du contenu sur Zhihu. Pour les développeurs PHP, il s'agit d'une compétence très pratique qui peut être utilisée dans l'analyse des données, l'optimisation des moteurs de recherche et d'autres aspects du travail.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn