我有一个python脚本,可以检查特定的文件夹中是否有更改。更确切地说,我正在等待包含小时的新JSON文件。如果出现此JSON文件,则会调用一个函数来使用计划库计划任务。
创建的任务在计划的时间运行蜘蛛。
问题出在我的JSON文件中有多个小时。多次调用同一蜘蛛(与JSON文件中的行一样多),并且该程序引发ReactorNotRestartable错误。从schedule.run_pending
行调用蜘蛛。
我非常确定问题出自同一蜘蛛的多次调用,因为该程序已完成抓取的第一步(使用第一个URL的第一个小时),但对第二个则无效。
我不知道该如何处理这个反应堆问题,您能给我一些建议吗?
监视程序模块以监视存储库
try:
#get json hours
hours = get_all_starting_hours('../data/output/result_debut.json')
logger.info(hours)
#get json urls
urls = get_all_urls('../data/output/result_debut.json')
logger.info(urls)
for hour, url in zip(hours, urls):
#schedule pour chaque url la tâche pour l'heure donnée
logger.info(hour)
logger.info(url)
# schedule scraping task
schedule.every().day.at(str(hour)).do(job_that_executes_once, url, process_settings=None)
while True:
logger.info('dans le while')
#run scheduled task
schedule.run_pending()
time.sleep(1)
except Exception as e:
logger.debug(str(e))
时间表
def job_that_executes_once(url, process_settings):
logger.add("../data/logs/schedule_{time}.log")
logger.info('job a été lancé')
#run spider
run_MySpider(url)
return schedule.CancelJob
蜘蛛
class MySpider(scrapy.Spider):
name = "enchere_detail"
logger.add('../data/logs/Spider_{time}.log')
def __init__(self, **kwargs):
super(MySpider, self).__init__(**kwargs)
self.start_urls = [kwargs.get('url_start')]
logger.info(self.start_urls)
def parse(self, response):
logger.info('debut du parse')
yield{
'fin_vente': response.css('span.stats-heure-fin::text').get(),
'url' : response.url
}
def run_MySpider(url):
process.crawl(MySpider, url_start = url)
process.start()
错误是
line 754, in startRunning
raise error.ReactorNotRestartable()
twisted.internet.error.ReactorNotRestartable
谢谢
答案 0 :(得分:0)
不幸的是,我没有找到办法。我用beautifulSoup编写了一个代码,它可以让我多次执行同一段代码。