2017-08-04 6 views
0

J'essaye de mesurer le débit du système en scrapy et j'essaye de trouver quand la demande de HTTP a été tirée et quand elle a été accomplie accomplie en scrapy .Comment trouver quand une demande a commencé et quand elle s'est terminée en scrapy

Toutes les directions pour trouver une solution sont très appréciées.

+0

Ceci est une question très large .. cherchez-vous à déterminer si votre puissance d'analyse est limitée par rapport à votre vitesse de téléchargement? Je voudrais faire un tour rapide de scrapy's [aperçu de l'architecture] (https://docs.scrapy.org/en/latest/topics/architecture.html) et revenir avec quelque chose de plus spécifique .. – Aaron

Répondre

1

Vous pouvez utiliser un middleware personnalisé:

class MeasureMiddleware: 
    requests = [] 

    def process_request(self, request, spider): 
     # store the time and url of every outgoing request 
     self.requests.append((request.url, datetime.now())) 

    def process_response(self, request, response, spider): 
     # for everyone response check if one of tracked requests cameback 
     # if so, print start time and current time 
     item = [r for r in self.requests if r[0] == request.url] 
     if not item: 
      return 
     url, start_date = item[0] 
     logging.info(f'request {url} {start_date} - {datetime.now()}') 
     self.requests.remove(item) 

Activez ensuite le middleware téléchargeur

DOWNLOADER_MIDDLEWARES = { 
    'myproject.middlewares.MeasureMiddleware': 543, 
} 

Il convient de noter qu'en raison de la nature async de scrapy il ne sera pas ms précises, mais il devrait être assez précis pour donner une vue d'ensemble générique.