Maison  >  Article  >  développement back-end  >  Comment utiliser Scrapy pour explorer les données Zhihu ?

Comment utiliser Scrapy pour explorer les données Zhihu ?

王林
王林original
2023-06-22 14:51:151629parcourir

Scrapy est un outil de robot d'exploration de sites Python qui peut facilement nous aider à obtenir diverses données sur Internet. Zhihu est une plateforme sociale de questions-réponses populaire. Utilisez Scrapy pour capturer rapidement des questions, des réponses, des informations sur les utilisateurs et d'autres données sur Zhihu. Cet article explique comment utiliser Scrapy pour explorer les données Zhihu.

  1. Installer Scrapy

Vous devez d'abord installer Scrapy. Vous pouvez l'installer directement à l'aide de la commande pip :

pip install scrapy
  1. Create Scrapy project

Entrez le répertoire dans lequel vous souhaitez créer un projet Scrapy le terminal et utilisez la commande suivante pour créer son projet :

scrapy startproject zhihu

Cette commande créera un projet Scrapy nommé "zhihu" dans le répertoire courant.

  1. Create Spider

Utilisez la commande suivante pour créer un fichier Spider nommé "zhihu_spider.py" dans le répertoire du projet :

scrapy genspider zhihu_spider zhihu.com

Cette commande créera un fichier "zhihu_spider.py" dans le sous-répertoire "spiders" du répertoire du projet. Ce fichier contient un Spider avec zhihu.com comme URL de départ.

  1. Write Spider code

Ouvrez le fichier "zhihu_spider.py" et ajoutez le code suivant :

import scrapy

class ZhihuSpider(scrapy.Spider):
    name = 'zhihu'
    allowed_domains = ['zhihu.com']
    start_urls = ['https://www.zhihu.com/']

    def parse(self, response):
        pass

Dans le code, une classe Spider nommée "ZhihuSpider" est définie. La classe Spider doit définir les attributs suivants :

  • name : Nom de l'araignée
  • allowed_domains : Nom de domaine consulté
  • start_urls : Spider's URL de démarrage

Dans cet exemple, l'URL de départ de Spider est définie sur zhihu.com. Spider doit également contenir une méthode appelée « parse » pour traiter les données renvoyées par la réponse. Dans cet exemple, la méthode "parse" n'est pas encore implémentée, donc une instruction "pass" vide est ajoutée en premier.

  1. Analyser les données de la page

Après avoir terminé la création de Spider, vous devez ajouter le code pour analyser les données de la page. Dans la méthode "parse", utilisez le code suivant :

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(),
            }

Ce code récupère les éléments div de la page qui contiennent l'attribut "data-type" sans "question". Ensuite, parcourez chaque élément div pour extraire le titre de la question, le lien et la liste de réponses.

Dans le code ci-dessus, "yield" est un mot-clé du langage Python qui est utilisé pour générer un générateur. Un générateur est un itérateur contenant des éléments. Après le retour de chaque élément, l'exécution est suspendue à la position de cet élément. Dans Scrapy, le mot-clé « rendement » est utilisé pour renvoyer les données analysées de la page dans Scrapy.

  1. Exécutez le robot d'exploration

Après avoir fini d'écrire le code, utilisez la commande suivante pour exécuter le robot d'exploration dans le terminal :

scrapy crawl zhihu

this La commande démarrera le framework Scrapy et commencera à explorer les données Zhihu. Scrapy accédera automatiquement à l'URL de départ spécifiée dans Spider et analysera les données de page renvoyées via la méthode "parse". Les données analysées seront envoyées au terminal. Si vous devez enregistrer des données, vous pouvez stocker les données dans des fichiers CSV, JSON, etc.

  1. Exploration des données utilisateur

Le code ci-dessus ne peut explorer que les questions, réponses et autres données, mais ne peut pas obtenir d'informations sur l'utilisateur. Si vous devez explorer les données utilisateur, vous devez utiliser l'interface API de Zhihu. Dans Spider, vous pouvez utiliser le code suivant pour obtenir les données au format JSON renvoyées par l'interface API :

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)

Ce code obtient les informations utilisateur spécifiées depuis l'interface API. Ici, la chaîne au format f-string est utilisée pour insérer le nom d'utilisateur de l'utilisateur à obtenir dans l'URL.

Dans la fonction de rappel, utilisez le code suivant pour extraire les données requises des données au format 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,
        }

Ce code extrait l'identifiant et le pseudo de l'utilisateur des données JSON , avatar, nombre de followers, nombre de fans, meilleures réponses aux questions et autres données.

  1. Summary

Cet article explique comment utiliser Scrapy pour explorer les données Zhihu. Tout d’abord, vous devez créer un projet Scrapy et créer un Spider. Ensuite, utilisez les sélecteurs CSS pour analyser les données de la page et stocker les données analysées dans le générateur. Enfin, stockez-le dans des fichiers CSV, JSON, etc., ou affichez-le directement sur le terminal. Si vous avez besoin d'obtenir des données utilisateur, vous pouvez utiliser l'interface API Zhihu pour extraire les données pertinentes des données JSON.

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