Maison >développement back-end >Tutoriel Python >Crawlers distribués dans Scrapy et méthodes pour améliorer l'efficacité de l'exploration des données
Scrapy est un framework de robot d'exploration Web Python efficace qui peut écrire des programmes de robot d'exploration rapidement et de manière flexible. Cependant, lors du traitement de grandes quantités de données ou de sites Web complexes, les robots d'exploration autonomes peuvent rencontrer des problèmes de performances et d'évolutivité. À l'heure actuelle, des robots d'exploration distribués doivent être utilisés pour améliorer l'efficacité de l'exploration des données. Cet article présente les robots d'exploration distribués dans Scrapy et les méthodes permettant d'améliorer l'efficacité de l'exploration des données.
1. Qu'est-ce qu'un robot distribué ?
Dans l'architecture traditionnelle des robots d'exploration à machine unique, tous les robots d'exploration s'exécutent sur la même machine. Lorsqu'ils sont confrontés à de grandes quantités de données ou à des tâches d'exploration à haute pression, les performances de la machine sont souvent limitées. Les robots d'exploration distribués répartissent les tâches du robot d'exploration sur plusieurs machines pour traitement. Grâce à l'informatique et au stockage distribués, la charge sur une seule machine est réduite, améliorant ainsi l'efficacité et la stabilité du robot d'exploration.
Les robots d'exploration distribués dans Scrapy sont généralement implémentés à l'aide du cadre de planification distribuée open source Distributed Scrapy (DSC en abrégé). DSC distribue les programmes d'exploration Scrapy sur plusieurs machines pour un traitement parallèle et résume uniformément les résultats au nœud de planification central.
2. Comment implémenter un robot distribué ?
1. Installer Distributed Scrapy
Exécutez la commande suivante pour installer DSC :
pip install scrapy_redis
pip install pymongo# 🎜🎜#
2. Modifier le fichier de configuration Scrapy Ajoutez la configuration suivante dans le fichier settings.py du projet Scrapy : Utiliser le planificateur redis
Dans le programme du robot Scrapy, vous devez modifier la méthode de demande de démarrage et utiliser le démarrage méthode de scrapy-redis :
encoding:utf-8
import scrapy,re,json
from ..items import DouyuItemclass DouyuSpider(RedisSpider):
# 爬虫名字 name = 'douyu' # redis-key,从redis中pop数据进行爬取 redis_key = 'douyu:start_urls' def parse(self, response): # scrapy爬虫代码4. Démarrez le service RedisExécutez la commande suivante dans le terminal pour démarrer le service Redis : #🎜🎜 #
redis-server
5. Démarrer Distributed Scrapy
Entrez la commande suivante dans le terminal pour démarrer le DSC. node:
scrapy crawl douyu -s JOBDIR=job1
Parmi eux, job1 peut être un nom personnalisé, qui est utilisé par DSC pour enregistrer l'état du robot.
3. Optimiser le robot d'exploration Scrapy
Scrapy fournit de nombreuses méthodes pour optimiser l'efficacité du robot d'exploration s'il est utilisé avec des robots d'exploration distribués, l'efficacité de l'exploration des données peut être encore améliorée.
1. Utiliser CrawlerRunner
CrawlerRunner nécessite une classe Twisted pour étendre l'application. Par rapport à la simple exécution d'un fichier Python, cela vous permet d'exécuter plusieurs robots d'exploration simultanément dans le même processus sans utiliser plusieurs processus ou plusieurs machines. Cela peut faciliter la gestion des tâches.
La façon d'utiliser CrawlerRunner est la suivante :
from twisted.internet import réacteur, différer
from scrapy.crawler import CrawlerRunnerfrom scrapy. utils.project import get_project_settings
from my_spider.spiders.my_spider import MySpiderrunner = CrawlerRunner(get_project_settings())
@defer.inlineCallbacks
def crawl() :
yield runner.crawl(MySpider) reactor.stop()crawl()
reactor.run()
2. Réduire la priorité de téléchargement du middleware
CONCURRENT_REQUESTS_PER_DOMAIN = 2
DOWNLOADER_MIDDLEWARES = { # 🎜🎜 # 'myproject.middlewares.MyCustomDownloaderMiddleware' : 543,
}3. Ajustez les paramètres CONCURRENT_REQUESTS et DOWNLOAD_DELAY
CONCURRENT_REQUESTS indique le nombre maximum de demandes que chaque nom de domaine peut gérer simultanément, qui peut être raisonnablement ajusté en fonction de la configuration de la machine et des exigences de la tâche.
DOWNLOAD_DELAY représente le délai entre chaque requête. L'efficacité du robot peut être améliorée en augmentant le délai ou les requêtes asynchrones.
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!