2014-04-09 9 views
5

मैं स्पाइडर कॉलबैक के भीतर से आंकड़े कैसे एकत्र कर सकता हूं?स्केपर स्पाइडर कॉलबैक के भीतर से आंकड़े कैसे एकत्र करें?

उदाहरण

class MySpider(Spider): 
    name = "myspider" 
    start_urls = ["http://example.com"] 

def parse(self, response): 
    stats.set_value('foo', 'bar') 
नहीं

यकीन है कि क्या import करने के लिए या कैसे सामान्य रूप में stats उपलब्ध बनाने के लिए।

उत्तर

7

stats page from the scrapy documentation देखें। दस्तावेज बताता है कि आंकड़े कलेक्टर, लेकिन इसके साथ सामान करने में सक्षम होने के लिए अपने स्पाइडर कोड में जोड़ना आवश्यक हो सकता है।

संपादित करें: अपने स्वयं के तुरही को उड़ाने के जोखिम पर, यदि आप एक ठोस उदाहरण के बाद थे तो मैंने answer about how to collect failed urls पोस्ट किया था।

EDIT2: बहुत सारे गुगलिंग के बाद, स्पष्ट रूप से कोई आयात आवश्यक नहीं है। बस self.crawler.stats.set_value() का उपयोग करें!

+0

हम्म अंदर इस जोड़ें। यह '' आयात त्रुटि 'लौटाता है: नाम क्रॉलर आयात नहीं कर सकता है। 'फाइल" /usr/local/Cellar/python/2.7.6/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/scrapy/stats.py ", पंक्ति 1, में scrapy.project आयात क्रॉलर से ' – mattes

+0

यह अजीब है। मुझे लगता है कि आपका मूल मकड़ी बिना त्रुटि के काम करता है? – Talvalin

+0

हाँ। यह तब तक काम करता है जब तक मैं 'आंकड़े' के साथ कुछ भी नहीं करता हूं। यहां मेरा उदाहरण है कि मेरा मकड़ी कैसा दिखता है: https://gist.github.com/mattes/10367042 – mattes

1

scrapy 0.24 - stats के साथ मैं जिस तरह से पालन द्वारा इसका इस्तेमाल:

class TopSearchesSpider(CrawlSpider): 
    name = "topSearches" 
    allowed_domains = ["...domain..."] 

    start_urls = (
     'http://...domain...', 
    ) 

    def __init__(self, stats): 
     super(TopSearchesSpider, self).__init__() 
     self.stats = stats 

    @classmethod 
    def from_crawler(cls, crawler): 
     return cls(crawler.stats) 

    def parse_start_url(self, response): 
     sel = Selector(response); 
     url = response.url; 

     self.stats.inc_value('pages_crawled') 
     ... 

सुपर विधि का अपना कोड निष्पादित करने के लिए CrawlSpider निर्माता कॉल करने के लिए है।

0

अपने मकड़ी वर्ग

def my_parse(self, response): 
    print self.crawler.stats.get_stats() 
संबंधित मुद्दे