C/C++教程

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

 

这篇关于Scrapy:用cmdline运行爬虫后导致主程序也结束——CrawlerProcesser的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!