我有两个不同脚本的 scrapy 蜘蛛
Spiders
Spider1.py
Spider2.py
蜘蛛中的代码示例如下:
from scrapy.crawler import CrawlerRunner
from twisted.internet import reactor
class Spider(scrapy.spider):
# some code
runner = CrawlerRunner(
settings={'FEEDS':
{'../input/next.csv': {'format':
'csv'}}})
runner.crawl(Spider)
d = runner.join()
d.addBoth(lambda _: reactor.stop())
reactor.run()
我使用以下代码从单独的脚本运行两个蜘蛛:
import runpy as r
def run_webscraper():
r.run_path(path_name='Spider1.py')
r.run_path(path_name='Spider2.py')
return
if __name__ == '__main__':
run_webscrapper()
当我尝试运行蜘蛛时,Spider1 运行并将结果保存在相应的 csv 文件中,但是当执行 Spider2 时,我收到以下错误:
twisted.internet.error.ReactorNotRestartable
关于如何修复代码以便两个蜘蛛运行并将其结果保存在单独的文件(spider1.csv、spider2.csv)中,有什么想法吗?
这真的可能吗?
我相信您可以通过在每个蜘蛛中创建一个自定义设置来做到这一点,如下所示:
蜘蛛1:
class Spider1(scrapy.Spider):
name='spider1'
custom_settings = {
'FEEDS': {
'spider1.csv': {
'format': 'csv'
}
}
}
蜘蛛2:
class Spider2(scrapy.Spider):
name='spider2'
custom_settings = {
'FEEDS': {
'spider2.csv': {
'format': 'csv'
}
}
}