Scrapy:爬行多个蜘蛛共享相同的项目、管道和设置,但具有单独的输出
问题:Scrapy:爬行多个蜘蛛共享相同的项目、管道和设置,但具有单独的输出 我正在尝试使用基于官方文档中提供的代码的 Python 脚本运行多个蜘蛛。我的scrapy项目包含多个蜘蛛(_Spider1,Spider2,_等),它们爬取不同的网站并将每个网站的内容保存在不同的JSON文件(_output1.json,output2.json,_等)中。 在不同网站上收集的项目具有相同的结构,因此蜘
问题:Scrapy:爬行多个蜘蛛共享相同的项目、管道和设置,但具有单独的输出
我正在尝试使用基于官方文档中提供的代码的 Python 脚本运行多个蜘蛛。我的scrapy项目包含多个蜘蛛(_Spider1,Spider2,_等),它们爬取不同的网站并将每个网站的内容保存在不同的JSON文件(_output1.json,output2.json,_等)中。
在不同网站上收集的项目具有相同的结构,因此蜘蛛使用相同的项目、管道和设置类。输出由管道中的自定义 JSON 类生成。
当我单独运行蜘蛛时,它们会按预期工作,但是当我使用下面的脚本通过 scrapy API 运行蜘蛛时,项目会在管道中混合。 Output1.json 应该只包含_Spider1_ 抓取的项目,但它也包含_Spider2_ 的项目。如何使用相同的项目、管道和设置来抓取多个带有 scrapy API 的蜘蛛,但生成单独的输出?
这是我用来运行多个蜘蛛的代码:
import scrapy
from scrapy.crawler import CrawlerProcess
from web_crawler.spiders.spider1 import Spider1
from web_crawler.spiders.spider2 import Spider2
settings = get_project_settings()
process = CrawlerProcess(settings)
process.crawl(Spider1)
process.crawl(Spider2)
process.start()
示例 output1.json:
{
"Name": "Thomas"
"source": "Spider1"
}
{
"Name": "Paul"
"source": "Spider2"
}
{
"Name": "Nina"
"source": "Spider1"
}
示例 output2.json:
{
"Name": "Sergio"
"source": "Spider1"
}
{
"Name": "David"
"source": "Spider1"
}
{
"Name": "James"
"source": "Spider2"
}
正常情况下,spider1("source": "Spider1") 爬取的所有名字都在 output1.json 中,spider2 ("source": "Spider2") 爬取的所有名字都在 output2.json 中
谢谢您的帮助!
解答
根据docs在同一进程上按顺序运行蜘蛛,您必须链接延迟。
尝试这个:
import scrapy
from scrapy.crawler import CrawlerRunner
from web_crawler.spiders.spider1 import Spider1
from web_crawler.spiders.spider2 import Spider2
settings = get_project_settings()
runner = CrawlerRunner(settings)
@defer.inlineCallbacks
def crawl():
yield runner.crawl(Spider1)
yield runner.crawl(Spider2)
reactor.stop()
crawl()
reactor.run()
更多推荐
所有评论(0)