2013-04-05 16 views
9

युपीडी: पास नहीं सवाल है क्योंकि मुझे लगता है कि मेरे रास्ते इतना स्पष्ट रूपScrapy अनुरोध + प्रतिक्रिया + डाउनलोड समय

यह आइटम करने के लिए इसे बचाने के लिए वर्तमान अनुरोध + प्रतिक्रिया + डाउनलोड समय प्राप्त करने के लिए संभव है होना चाहिए नहीं है ?

"सादे" अजगर में मुझे क्या करना

start_time = time() 
urllib2.urlopen('http://example.com').read() 
time() - start_time 

लेकिन मैं कैसे Scrapy के साथ ऐसा कर सकते हैं?

युपीडी:

समाधान मेरे लिए enought लेकिन मैं परिणामों की गुणवत्ता के बारे में सुनिश्चित नहीं हूँ। आप समय समाप्त त्रुटियों के साथ कई कनेक्शन है, तो Download time गलत हो सकता है (यहां तक ​​कि DOWNLOAD_TIMEOUT * 3)

लिए

settings.py

DOWNLOADER_MIDDLEWARES = { 
    'myscraper.middlewares.DownloadTimer': 0, 
} 

middlewares.py

from time import time 
from scrapy.http import Response 


class DownloadTimer(object): 
    def process_request(self, request, spider): 
     request.meta['__start_time'] = time() 
     # this not block middlewares which are has greater number then this 
     return None 

    def process_response(self, request, response, spider): 
     request.meta['__end_time'] = time() 
     return response # return response coz we should 

    def process_exception(self, request, exception, spider): 
     request.meta['__end_time'] = time() 
     return Response(
      url=request.url, 
      status=110, 
      request=request) 
मकड़ी के अंदर

def parse(...

log.msg('Download time: %.2f - %.2f = %.2f' % (
    response.meta['__end_time'], response.meta['__start_time'], 
    response.meta['__end_time'] - response.meta['__start_time'] 
), level=log.DEBUG) 
में पीई

उत्तर

6

आप Downloader Middleware लिख सकते हैं जो प्रत्येक अनुरोध के लिए समय होगा। यह अनुरोध करने से पहले अनुरोध के लिए एक प्रारंभ समय जोड़ देगा और फिर समाप्त होने पर एक समाप्ति समय होगा। आम तौर पर, इस तरह के मनमाना डेटा Request.meta विशेषता में संग्रहीत किया जाता है। इस समय की जानकारी को बाद में आपके मकड़ी द्वारा पढ़ा जा सकता है और आपके आइटम में जोड़ा जा सकता है।

यह डाउनलोडर मिडलवेयर लगता है जैसे यह कई परियोजनाओं पर उपयोगी हो सकता है।

संबंधित मुद्दे