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

 

posted @   ShineLe  阅读(453)  评论(0编辑  收藏  举报
编辑推荐:
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
阅读排行:
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
点击右上角即可分享
微信分享提示