2015-04-21 3 views
3

имеют этот код, который запускает сканирующий сканер со сценария (http://doc.scrapy.org/en/latest/topics/practices.html#run-scrapy-from-a-script). Но это не сработает.Как использовать APscheduler с scrapy

from twisted.internet import reactor 
from scrapy.crawler import Crawler 
from scrapy import log,signals 
from spiders.egov import EgovSpider 
from scrapy.utils.project import get_project_settings 

def run(): 
    spider =EgovSpider() 
    settings = get_project_settings() 
    crawler = Crawler(settings) 
    crawler.signals.connect(reactor.stop, signal=signals.spider_closed) 
    crawler.configured 
    crawler.crawl(spider) 
    crawler.start() 
    log.start() 
    reactor.run() 


from apscheduler.schedulers.twisted import TwistedScheduler 
sched = TwistedScheduler() 
sched.add_job(run, 'interval', seconds=10) 
sched.start() 

Мой паук:

import scrapy 

class EgovSpider(scrapy.Spider): 
    name = 'egov' 
    start_urls = ['http://egov-buryatia.ru/index.php?id=1493'] 


    def parse(self, response): 

     data = response.xpath("//div[@id='main_wrapper_content_news']//tr//text()").extract() 
     print data 
     print response.url 
     f = open("vac.txt","a") 
     for d in data: 
      f.write(d.encode(encoding="UTF-8") + "\n") 

     f.write(str(now)) 
     f.close() 

Если я заменить строку "reactor.run()", паук начал один раз через 10 секунд:

from twisted.internet import reactor 
from scrapy.crawler import Crawler 
from scrapy import log,signals 
from spiders.egov import EgovSpider 
from scrapy.utils.project import get_project_settings 

def run(): 
    spider =EgovSpider() 
    settings = get_project_settings() 
    crawler = Crawler(settings) 
    crawler.signals.connect(reactor.stop, signal=signals.spider_closed) 
    crawler.configured 
    crawler.crawl(spider) 
    crawler.start() 
    log.start() 

from apscheduler.schedulers.twisted import TwistedScheduler 
sched = TwistedScheduler() 
sched.add_job(run, 'interval', seconds=10) 
sched.start() 
reactor.run() 

Я низкий опыт работы с питон и английский :) Пожалуйста, помогите мне.

+0

Хорошо, что случилось с последней частью кода? Вы сказали, что началось через 10 секунд, как предполагалось. –

+0

запускается один раз. Не каждые 10 секунд. – kzr

+0

Если вы все еще ищете ответ [здесь] (http://kirankoduru.github.io/python/running-scrapy-programmatically.html), это blogpost, который я написал не так давно, как его реализовать. Для этого вам понадобится версия 0.24. –

ответ

0

Сегодня я столкнулся с такой же проблемой. Вот некоторая информация.

Скрученный реактор не может перезагрузиться после его запуска и остановки. Вы должны запустить долгоживущий реактор и периодически добавлять задачи (и) гусеницы.

Для более простого кода вы можете использовать CrawlerProcess.start(), который включает в себя reactor.run().

from scrapy.crawler import CrawlerProcess 
from spiders.egov import EgovSpider 
from scrapy.utils.project import get_project_settings 
from apscheduler.schedulers.twisted import TwistedScheduler 

process = CrawlerProcess(get_project_settings()) 
sched = TwistedScheduler() 
sched.add_job(process.crawl, 'interval', args=[EgovSpider], seconds=10) 
sched.start() 
process.start(False) # Do not stop reactor after spider closes 
Смежные вопросы