Maison > développement back-end > Tutoriel Python > Implémenter l'enregistrement et l'analyse de données basées sur des séries chronologiques à l'aide de Scrapy et MongoDB

Implémenter l'enregistrement et l'analyse de données basées sur des séries chronologiques à l'aide de Scrapy et MongoDB

WBOY
Libérer: 2023-06-22 10:18:17
original
1714 Les gens l'ont consulté

Avec le développement rapide de la technologie du Big Data et de l'exploration de données, les gens accordent de plus en plus d'attention à l'enregistrement et à l'analyse des données de séries chronologiques. En termes de robots d'exploration Web, Scrapy est un très bon framework de robots et MongoDB est une très bonne base de données NoSQL. Cet article explique comment utiliser Scrapy et MongoDB pour mettre en œuvre l'enregistrement et l'analyse de données basées sur des séries chronologiques.

1. Installation et utilisation de Scrapy

Scrapy est un framework de robot d'exploration de sites Web implémenté en langage Python. Nous pouvons utiliser la commande suivante pour installer Scrapy :

pip install scrapy
Copier après la connexion

Une fois l'installation terminée, nous pouvons utiliser Scrapy pour écrire notre robot. Ci-dessous, nous utiliserons un exemple simple de robot pour comprendre l'utilisation de Scrapy.

1. Créez un projet Scrapy

Dans le terminal de ligne de commande, créez un nouveau projet Scrapy via la commande suivante :

scrapy startproject scrapy_example
Copier après la connexion

Après le projet est créé, nous pouvons entrer dans le répertoire racine du projet via la commande suivante :

cd scrapy_example
Copier après la connexion

2 Écrivez un robot

Nous pouvons créer un nouveau robot via la commande suivante :

scrapy genspider example www.example.com
Copier après la connexion

L'exemple ici est le nom du robot d'exploration personnalisé, et www.example.com est le nom de domaine du site Web exploré. Scrapy générera un fichier de modèle de robot par défaut. Nous pouvons modifier ce fichier pour écrire le robot.

Dans cet exemple, nous explorons une page Web simple et enregistrons le contenu texte de la page Web dans un fichier texte. Le code du robot est le suivant :

import scrapy

class ExampleSpider(scrapy.Spider):
    name = "example"
    start_urls = ["https://www.example.com/"]

    def parse(self, response):
        filename = "example.txt"
        with open(filename, "w") as f:
            f.write(response.text)
        self.log(f"Saved file {filename}")
Copier après la connexion

3. Exécutez le robot

Avant d'exécuter le robot, nous définissons d'abord la configuration de Scrapy. Dans le répertoire racine du projet, recherchez le fichier settings.py et définissez ROBOTSXT_OBEY sur False afin que notre robot d'exploration puisse explorer n'importe quel site Web.

ROBOTSTXT_OBEY = False
Copier après la connexion

Ensuite, nous pouvons exécuter le robot via la commande suivante :

scrapy crawl example
Copier après la connexion

Une fois l'opération terminée, nous pouvons voir un exemple dans le répertoire racine du projet txt. fichier, qui stocke le contenu textuel des pages Web que nous avons explorées.

2. Installation et utilisation de MongoDB

MongoDB est une très excellente base de données NoSQL. Nous pouvons installer MongoDB à l'aide de la commande suivante :

sudo apt-get install mongodb
Copier après la connexion

Une fois l'installation terminée, nous devons démarrer le service MongoDB. Entrez la commande suivante dans le terminal de ligne de commande :

sudo service mongodb start
Copier après la connexion

Après avoir démarré avec succès le service MongoDB, nous pouvons exploiter les données via MongoDB Shell.

1. Créez une base de données

Entrez la commande suivante dans le terminal de ligne de commande pour vous connecter à la base de données MongoDB :

mongo
Copier après la connexion

Une fois la connexion établie réussi, nous pouvons utiliser La commande suivante crée une nouvelle base de données :

use scrapytest
Copier après la connexion

Le scrapytest ici est le nom de notre base de données personnalisée.

2. Créer une collection

Dans MongoDB, nous utilisons des collections pour stocker des données. Nous pouvons utiliser la commande suivante pour créer une nouvelle collection :

db.createCollection("example")
Copier après la connexion

L'exemple ici est le nom de notre collection personnalisée.

3. Insérer des données

En Python, on peut utiliser la bibliothèque pymongo pour accéder à la base de données MongoDB. Nous pouvons utiliser la commande suivante pour installer la bibliothèque pymongo :

pip install pymongo
Copier après la connexion

Une fois l'installation terminée, nous pouvons utiliser le code suivant pour insérer des données :

import pymongo

client = pymongo.MongoClient(host="localhost", port=27017)
db = client["scrapytest"]
collection = db["example"]
data = {"title": "example", "content": "Hello World!"}
collection.insert_one(data)
Copier après la connexion

Les données ici sont les données que nous voulons insérer, Contient deux champs : titre et contenu.

4. Interroger des données

Nous pouvons utiliser le code suivant pour interroger des données :

import pymongo

client = pymongo.MongoClient(host="localhost", port=27017)
db = client["scrapytest"]
collection = db["example"]
result = collection.find_one({"title": "example"})
print(result["content"])
Copier après la connexion

La condition de requête ici est "titre": "exemple ", Indique une requête de données dont le champ de titre est égal à l'exemple. Les résultats de la requête incluront l'intégralité du document de données et nous pourrons obtenir la valeur du champ de contenu via result["content"].

3. Utilisation combinée de Scrapy et de MongoDB

Dans les applications de robots réelles, nous devons souvent enregistrer les données analysées dans la base de données et chronométrer l'enregistrement et l'analyse des séquences. . La combinaison de Scrapy et MongoDB peut bien répondre à cette exigence.

Dans Scrapy, nous pouvons utiliser des pipelines pour traiter les données analysées et enregistrer les données dans MongoDB.

1. Créer un pipeline

Nous pouvons créer un fichier nommé pipelines.py dans le répertoire racine du projet Scrapy et définir notre pipeline dans ce fichier. Dans cet exemple, nous enregistrons les données analysées dans MongoDB et ajoutons un champ d'horodatage pour représenter l'horodatage de l'enregistrement de données. Le code est le suivant :

import pymongo
from datetime import datetime

class ScrapyExamplePipeline:
    def open_spider(self, spider):
        self.client = pymongo.MongoClient("localhost", 27017)
        self.db = self.client["scrapytest"]

    def close_spider(self, spider):
        self.client.close()

    def process_item(self, item, spider):
        collection = self.db[spider.name]
        item["timestamp"] = datetime.now()
        collection.insert_one(dict(item))
        return item
Copier après la connexion

Ce pipeline sera appelé à chaque fois que le robot explore un élément. Nous convertissons les éléments analysés en dictionnaire, ajoutons un champ d'horodatage, puis enregistrons l'intégralité du dictionnaire dans MongoDB.

2. Configurer le pipeline

Trouvez le fichier settings.py dans le répertoire racine du projet Scrapy et définissez ITEM_PIPELINES sur le pipeline que nous venons de définir :

ITEM_PIPELINES = {
   "scrapy_example.pipelines.ScrapyExamplePipeline": 300,
}
Copier après la connexion
# 🎜 🎜#Le 300 ici est la priorité du pipeline, indiquant l'ordre d'exécution du pipeline dans tous les pipelines.

3. Modifiez le code du robot

Modifiez le code du robot que nous venons d'écrire et transmettez l'élément au pipeline.

import scrapy

class ExampleSpider(scrapy.Spider):
    name = "example"
    start_urls = ["https://www.example.com/"]

    def parse(self, response):
        for text in response.css("p::text"):
            yield {"text": text.extract()}
Copier après la connexion

Ici, nous explorons simplement le contenu du texte sur la page Web et enregistrons le contenu dans un champ de texte. Scrapy transmettra cet élément au pipeline défini pour traitement.

4. Interroger les données

Maintenant, nous pouvons enregistrer les données analysées dans MongoDB. Nous devons également mettre en œuvre l’enregistrement et l’analyse de séries chronologiques. Nous pouvons le faire en utilisant les opérations de requête et d'agrégation de MongoDB.

Trouver des données dans une période de temps spécifiée :

import pymongo
from datetime import datetime

client = pymongo.MongoClient("localhost", 27017)
db = client["scrapytest"]
collection = db["example"]
start_time = datetime(2021, 1, 1)
end_time = datetime(2021, 12, 31)
result = collection.find({"timestamp": {"$gte": start_time, "$lte": end_time}})
for item in result:
    print(item["text"])
Copier après la connexion

Ici, nous trouvons toutes les données pour 2021.

统计每个小时内的记录数:

import pymongo

client = pymongo.MongoClient("localhost", 27017)
db = client["scrapytest"]
collection = db["example"]
pipeline = [
    {"$group": {"_id": {"$hour": "$timestamp"}, "count": {"$sum": 1}}},
    {"$sort": {"_id": 1}},
]
result = collection.aggregate(pipeline)
for item in result:
    print(f"{item['_id']}: {item['count']}")
Copier après la connexion

这里我们使用MongoDB的聚合操作来统计每个小时内的记录数。

通过Scrapy和MongoDB的结合使用,我们可以方便地实现时间序列的数据记录和分析。这种方案的优点是具有较强的扩展性和灵活性,可以适用于各种不同的应用场景。不过,由于本方案的实现可能涉及到一些较为复杂的数据结构和算法,所以在实际应用中需要进行一定程度的优化和调整。

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal