2015-01-02 5 views
2

나는 scrapy 워드 프로세서의 예에 따라 외부 파일에서 scrapy 거미를 실행하고 있습니다. 나는 코어 API에서 제공하는 통계를 잡고 크롤링이 완료된 후 MySQL의 테이블에 저장합니다.어떻게 scrapy 실행에서 통계를 얻으려면?

from twisted.internet import reactor 
from scrapy.crawler import Crawler 
from scrapy import log, signals 
from test.spiders.myspider import * 
from scrapy.utils.project import get_project_settings 
from test.pipelines import MySQLStorePipeline 
import datetime 

spider = MySpider() 


def run_spider(spider):   
    settings = get_project_settings() 
    crawler = Crawler(settings) 
    crawler.signals.connect(reactor.stop, signal=signals.spider_closed) 
    crawler.configure() 
    crawler.crawl(spider) 
    crawler.start() 
    log.start() 
    reactor.run() 
    mysql_insert = MySQLStorePipeline() 
     mysql_insert.cursor.execute(
      'insert into crawler_stats(sites_id, start_time,end_time,page_scraped,finish_reason) 
       values(%s,%s,%s, %s,%s)', 
        (1,datetime.datetime.now(),datetime.datetime.now(),100,'test')) 

    mysql_insert.conn.commit() 

run_spider(spider) 

어떻게 위의 코드에 START_TIME, END_TIME, pages_scraped, finish_reason 같은 통계의 값을 얻을 수 있나요?

답변

5

그들은 crawler.stats collector에서 가져 오기 :

stats = crawler.stats.get_stats() 

예제 코드합니다 (spider_closed 신호 처리기에서 통계를 수집) :

def callback(spider, reason): 
    stats = spider.crawler.stats.get_stats() # stats is a dictionary 

    # write stats to the database here 

    reactor.stop() 


def run_spider(spider):   
    settings = get_project_settings() 
    crawler = Crawler(settings) 
    crawler.signals.connect(callback, signal=signals.spider_closed) 
    crawler.configure() 
    crawler.crawl(spider) 
    crawler.start() 
    log.start() 
    reactor.run() 


run_spider(spider) 
+0

당신이 나에게 예제 코드를 제공하시기 바랍니다 수 있습니까? – Anish

+0

@Ngeunpo 확인, 업데이트되었습니다. 확인해주십시오. – alecxe

+0

나는 통계에서 finish_time 및 finish_reason을 받고 있지 않다. – Anish

관련 문제