Maison > Article > développement back-end > Implémenter l'enregistrement et l'analyse de données basées sur des séries chronologiques à l'aide de Scrapy et MongoDB
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
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
Après le projet est créé, nous pouvons entrer dans le répertoire racine du projet via la commande suivante :
cd scrapy_example
2 Écrivez un robot
Nous pouvons créer un nouveau robot via la commande suivante :
scrapy genspider example www.example.com
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}")
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
Ensuite, nous pouvons exécuter le robot via la commande suivante :
scrapy crawl example
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
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
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
Une fois la connexion établie réussi, nous pouvons utiliser La commande suivante crée une nouvelle base de données :
use scrapytest
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")
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
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)
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"])
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
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, }# 🎜 🎜#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()}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éesMaintenant, 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"])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']}")
这里我们使用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!