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

Crawlers distribués dans Scrapy et méthodes pour améliorer l'efficacité de l'exploration des données

WBOY
WBOYoriginal
2023-06-22 21:25:491450parcourir

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

SCHEDULER = "scrapy_redis.scheduler.Scheduler"

Utiliser la stratégie de déduplication redis

DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"#🎜 🎜# # 🎜🎜 #Si vous n'effacez pas les enregistrements Redis, vous pouvez suspendre/reprendre l'exploration

SCHEDULER_PERSIST=True

Définir les paramètres de connexion Redis

REDIS_HOST ='localhost'# 🎜🎜#REDIS_PORT=6379

3. Écrivez le code du robot


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 DouyuItem

#🎜🎜 #from scrapy_redis.spiders import RedisSpider

class DouyuSpider(RedisSpider):

# 爬虫名字
name = 'douyu'
# redis-key,从redis中pop数据进行爬取
redis_key = 'douyu:start_urls'

def parse(self, response):
    # scrapy爬虫代码

4. Démarrez le service Redis

Exé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 CrawlerRunner

from scrapy. utils.project import get_project_settings

from my_spider.spiders.my_spider import MySpider

runner = 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

If. nécessaire Pour traiter des données volumineuses ou complexes dans le middleware de téléchargement, vous pouvez utiliser CONCURRENT_REQUESTS_PER_DOMAIN pour réduire la priorité du middleware de téléchargement :


CONCURRENT_REQUESTS_PER_DOMAIN = 2

DOWNLOAD_DELAY = 0.5

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.

4. Résumé

Le robot distribué de Scrapy peut nous aider à traiter rapidement de grandes quantités de données et à améliorer l'efficacité du robot. Dans le même temps, l'efficacité du robot d'exploration peut être encore améliorée en réduisant la priorité du middleware de téléchargement, en ajustant le nombre de coroutines et en augmentant le délai de requête. Le robot d'exploration distribué est l'une des fonctions importantes de Scrapy Learning, il peut nous permettre de gérer facilement diverses tâches de robot.

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