これが私がscrapyと呼ぶために使用しているPythonスクリプトです。
スクリプトからのScrapyクロールは、スクレイピング後のスクリプトの実行を常にブロックします
def stop_reactor():
reactor.stop()
dispatcher.connect(stop_reactor, signal=signals.spider_closed)
spider = MySpider(start_url='abc')
crawler = Crawler(Settings())
crawler.configure()
crawler.crawl(spider)
crawler.start()
log.start()
log.msg('Running reactor...')
reactor.run() # the script will block here until the spider is closed
log.msg('Reactor stopped.')
これが私のpipelines.pyコードです
from scrapy import log,signals
from scrapy.contrib.exporter import JsonItemExporter
from scrapy.xlib.pydispatch import dispatcher
class scrapermar11Pipeline(object):
def __init__(self):
self.files = {}
dispatcher.connect(self.spider_opened , signals.spider_opened)
dispatcher.connect(self.spider_closed , signals.spider_closed)
def spider_opened(self,spider):
file = open('links_pipelines.json' ,'wb')
self.files[spider] = file
self.exporter = JsonItemExporter(file)
self.exporter.start_exporting()
def spider_closed(self,spider):
self.exporter.finish_exporting()
file = self.files.pop(spider)
file.close()
def process_item(self, item, spider):
self.exporter.export_item(item)
log.msg('It reached here')
return item
このコードはここから取得されます
このようにクローラーを実行すると
scrapy crawl MySpider -a start_url='abc'
期待される出力のリンクファイルが作成されます。しかし、Pythonスクリプトを実行すると、ダンプされたスクレイプ統計が前の実行と同様であるため、クローラーは実行されますが、ファイルは作成されません。最初のアプローチでファイルが作成されているため、Pythonスクリプトに誤りがあると思います。スクリプトでファイルを出力するにはどうすればよいですか?