Maison  >  Article  >  développement back-end  >  Partage de conseils sur la façon de capturer les données de questions-réponses de Zhihu en utilisant PHP et phpSpider !

Partage de conseils sur la façon de capturer les données de questions-réponses de Zhihu en utilisant PHP et phpSpider !

WBOY
WBOYoriginal
2023-07-21 15:47:06705parcourir

Partage de conseils sur la capture des données de questions-réponses de Zhihu à l'aide de PHP et phpSpider !

En tant que plus grande plateforme de partage de connaissances en Chine, Zhihu dispose d'une quantité massive de données de questions et réponses. Pour de nombreux développeurs et chercheurs, l'obtention et l'analyse de ces données sont très précieuses. Cet article expliquera comment utiliser PHP et phpSpider pour capturer les données de questions-réponses de Zhihu, et partagera quelques conseils et exemples de code pratiques.

1. Installez phpSpider

phpSpider est un framework d'exploration écrit en langage PHP. Il dispose de puissantes fonctions de capture et de traitement de données et est très approprié pour capturer les données de questions-réponses de Zhihu. Voici les étapes d'installation de phpSpider :

  1. Installer Composer : assurez-vous d'abord que vous avez installé Composer. Vous pouvez vérifier s'il est installé en exécutant la commande suivante :
composer -v

Si le numéro de version de Composer peut être affiché normalement. , cela signifie que l'installation a réussi.

  1. Créez un nouveau répertoire de projet : exécutez la commande suivante dans la ligne de commande pour créer un nouveau projet phpSpider :
composer create-project vdb/php-spider my-project

Cela créera un nouveau répertoire appelé mon-projet et y installera phpSpider.

2. Écrivez le code phpSpider

  1. Créez une nouvelle tâche phpSpider : accédez au répertoire my-project et utilisez la commande suivante pour créer une nouvelle tâche phpSpider :
./phpspider --create mytask

Cela créera une nouvelle tâche phpSpider dans le my-project. répertoire du projet nommé mytask Un nouveau répertoire contenant les fichiers nécessaires pour récupérer les données.

  1. Modifier les règles d'exploration : Dans le répertoire mytask, ouvrez le fichier Rules.php, qui est un script PHP utilisé pour définir les règles d'exploration. Vous pouvez définir dans ce script l'URL de la page de questions-réponses de Zhihu que vous devez explorer, ainsi que les champs de données que vous souhaitez extraire.

Ce qui suit est un exemple de règle d'exploration simple :

return array(
    'name' => '知乎问答',
    'tasknum' => 1,
    'domains' => array(
        'www.zhihu.com'
    ),
    'start_urls' => array(
        'https://www.zhihu.com/question/XXXXXXXX'
    ),
    'scan_urls' => array(),
    'list_url_regexes' => array(
        "https://www.zhihu.com/question/XXXXXXXX/page/([0-9]+)"
    ),
    'content_url_regexes' => array(
        "https://www.zhihu.com/question/XXXXXXXX/answer/([0-9]+)"
    ),
    'fields' => array(
        array(
            'name' => "question",
            'selector_type' => 'xpath',
            'selector' => "//h1[@class='QuestionHeader-title']/text()"
        ),
        array(
            'name' => "answer",
            'selector_type' => 'xpath',
            'selector' => "//div[@class='RichContent-inner']/text()"
        )
    )
);

Dans l'exemple ci-dessus, nous avons défini une tâche d'exploration appelée Zhihu Q&A, qui explore toutes les réponses à une question spécifique. Il contient le nom du champ de données, le type de sélecteur et le sélecteur qui doivent être extraits.

  1. Écrivez une fonction de rappel personnalisée : dans le répertoire mytask, ouvrez le fichier callback.php. Il s'agit d'un script PHP utilisé pour traiter et enregistrer les données capturées.

Ce qui suit est un exemple de fonction de rappel personnalisée simple :

function handle_content($url, $content)
{
    $data = array();
    $dom = new DOMDocument();
    @$dom->loadHTML($content);
    
    // 使用XPath选择器提取问题标题
    $xpath = new DOMXPath($dom);
    $question = $xpath->query("//h1[@class='QuestionHeader-title']");
    $data['question'] = $question->item(0)->nodeValue;
    
    // 使用XPath选择器提取答案内容
    $answers = $xpath->query("//div[@class='RichContent-inner']");
    foreach ($answers as $answer) {
        $data['answer'][] = $answer->nodeValue;
    }
    
    // 保存数据到文件或数据库
    // ...
}

Dans l'exemple ci-dessus, nous avons défini une fonction de rappel nommée handle_content, qui sera appelée une fois les données capturées. Dans cette fonction, nous avons extrait le titre de la question et le contenu de la réponse à l'aide du sélecteur XPath et enregistré les données dans le tableau $data.

3. Exécutez la tâche phpSpider

  1. Démarrez la tâche phpSpider : Dans le répertoire my-project, utilisez la commande suivante pour démarrer la tâche phpSpider :
./phpspider --daemon mytask

Cela démarrera un processus phpSpider en arrière-plan et commencera à explorer Zhihu. Données de questions et réponses.

  1. Afficher les résultats de l'exploration : La tâche phpSpider enregistrera les données analysées dans le répertoire de données, avec le nom de la tâche comme nom de fichier, et chaque tâche d'exploration correspond à un fichier.

Vous pouvez afficher les résultats de l'exploration avec la commande suivante :

tail -f data/mytask/data.log

Cela affichera le journal d'exploration et les résultats en temps réel.

4. Résumé

Cet article présente les techniques d'utilisation de PHP et phpSpider pour capturer les données de questions-réponses de Zhihu. En installant phpSpider, en écrivant des règles d'exploration et des fonctions de rappel personnalisées, et en exécutant des tâches phpSpider, nous pouvons facilement explorer et traiter les données de questions-réponses de Zhihu.

Bien sûr, phpSpider a des fonctions et des utilisations plus puissantes, telles que l'exploration simultanée, les paramètres de proxy, les paramètres UA, etc., qui peuvent être configurés et utilisés en fonction des besoins réels. J'espère que cet article sera utile aux développeurs qui souhaitent capturer les données de questions-réponses de Zhihu !

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