转摘Scrapy:用cmdline运行爬虫后导致主程序也结束——CrawlerProcesser
学习自:
[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
声明:转载此文是出于传递更多信息之目的。若有来源标注错误或侵犯了您的合法权益,请作者持权属证明与本网联系,我们将及时更正、删除,谢谢。