首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从同一个python脚本运行2个爬虫

如何从同一个python脚本运行2个爬虫
EN

Stack Overflow用户
提问于 2022-07-18 00:02:50
回答 1查看 27关注 0票数 0

我有两个能独立运行的蟒蛇爬行器。

爬行器

它们是我想要运行的分析的一部分,我想将它们全部导入到一个逗号脚本中。

代码语言:javascript
复制
from crawler1.py import * 
from crawler2.py import * 

我的剧本有点低,我有这样的东西

代码语言:javascript
复制
if <condition1>:
    // running crawler1 
    runCrawler('crawlerName', '/dir1/dir2/')

if <condition2>:
    // running crawler2 
    runCrawler('crawlerName', '/dir1/dir2/')

runCrawler是:

代码语言:javascript
复制
def runCrawler(crawlerName, crawlerFileName):
    print('Running crawler for ' + crawlerName)

    process = CP(
        settings={
            'FEED_URI'   : crawlerFileName,
            'FEED_FORMAT': 'csv'
        }
    )

    process.crawl(globals()[crawlerName])
    process.start()

我得到以下错误:

代码语言:javascript
复制
Exception has occurred: ReactorAlreadyInstalledError
reactor already installed

第一个爬行器运行正常。第二个有问题。有什么想法吗?

我通过visual调试器运行上面的代码。

EN

回答 1

Stack Overflow用户

发布于 2022-07-18 21:49:32

最好的办法就是这样做。

你的代码应该是

代码语言:javascript
复制
from twisted.internet import reactor
from scrapy.crawler import CrawlerRunner
from scrapy.utils.log import configure_logging


# your code




settings={
            'FEED_FORMAT': 'csv'
        }
process = CrawlerRunner(Settings)

if condition1:
    process.crawl(spider1,crawlerFileName=crawlerFileName) 
if condition2:
    process.crawl(spider2,crawlerFileName=crawlerFileName)

d = process.join()
d.addBoth(lambda _: reactor.stop())
reactor.run()  # it will run both crawlers and code inside the function

你的蜘蛛应该像

代码语言:javascript
复制
class spider1(scrapy.Spider):
    name = "spider1"
    custom_settings = {'FEED_URI'   : spider1.crawlerFileName}
    def start_requests(self):
            yield scrapy.Request('https://scrapy.org/') 

    def parse(self, response):
        pass
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73016181

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档