转摘Scrapy:用cmdline运行爬虫后导致主程序也结束——CrawlerProcesser

段雅霜阅读量 7

学习自:

[Scrapy官方文档------CrawlerRunner相关](https://doc.scrapy.org/en/latest/topics/api.html#scrapy.crawler.Crawler)

[解决django或者其他线程中调用scrapy报ReactorNotRestartable的错误 - liuxianglong - 博客园](https://doc.scrapy.org/en/latest/topics/api.html#scrapy.crawler.Crawler)

[(6条消息) python定时启动多个爬虫,解决(twisted.internet.error.ReactorNotRestartable)报错_别挡着我发光的博客-CSDN博客](https://blog.csdn.net/qq_40138248/article/details/103977348)

[Scrapy:通过cmdLine从同一个python进程运行多个spider失败 - 问答 - Python中文网](https://www.cnpython.com/qa/336288)

解决方法:

不用普通的Spider类,而用CrawlerRunner或CrawlerProcesser类。

用法:

复制代码
from crochet import setup
from scrapy.crawler import CrawlerProcess

def Scrapy(adminname,filename,year):
    setup()
    process=CrawlerProcess()
    process.crawl(QSpider)

参数传递

[在Scrapy python中向process.crawn传递参数 - 问答 - Python中文网](https://www.cnpython.com/qa/92216)

如果想传入参数,可以写成如下形式:

复制代码
process.crawl(QSpider,attr1=value1,attr2=value2,...)

上段代码中attr1,attr2为传入变量名,value1,value2为这些变量的值。

在爬虫类QSpider中(构建该类时,基类仍是Spider)的__init__方法中访问这些传入参数:

复制代码
class QSpider(scrapy.Spider):
    name='Q'
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.96 Safari/537.36'
    }

    def __init__(self,attr1,attr2):    
        self.attr1=attr1
        self.attr2=attr2

前边的self.attr1是指类属性attr1,如果想为该属性赋值为之前传入的参数attr1,就在声明__init__的形参中写上这些参数,这样,传入的参数就保存到了类中对应的属性了。

复制代码
    ===========================
    【来源: 博客园】
    【作者: ShineLe】
    【原文链接】 https://www.cnblogs.com/ShineLeBlog/p/14668523.html
    声明:转载此文是出于传递更多信息之目的。若有来源标注错误或侵犯了您的合法权益,请作者持权属证明与本网联系,我们将及时更正、删除,谢谢。
0/300
全部评论0
0/300