编程语言
首页 > 编程语言> > Scrapy:用cmdline运行爬虫后导致主程序也结束——CrawlerProcesser

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

作者:互联网

学习自:

Scrapy官方文档——CrawlerRunner相关

解决django或者其他线程中调用scrapy报ReactorNotRestartable的错误 - liuxianglong - 博客园

(6条消息) python定时启动多个爬虫,解决(twisted.internet.error.ReactorNotRestartable)报错_别挡着我发光的博客-CSDN博客

Scrapy:通过cmdLine从同一个python进程运行多个spider失败 - 问答 - Python中文网

 

解决方法:

不用普通的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中文网

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

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__的形参中写上这些参数,这样,传入的参数就保存到了类中对应的属性了。

 

标签:__,主程序,process,self,CrawlerProcesser,cmdline,Scrapy,attr2,attr1
来源: https://www.cnblogs.com/ShineLeBlog/p/14668523.html