Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 将从_crawler方法添加到scrapy.xlib.pydispatch脚本_Python 3.x_Selenium_Scrapy - Fatal编程技术网

Python 3.x 将从_crawler方法添加到scrapy.xlib.pydispatch脚本

Python 3.x 将从_crawler方法添加到scrapy.xlib.pydispatch脚本,python-3.x,selenium,scrapy,Python 3.x,Selenium,Scrapy,如果你发现这个问题研究得很好并且对你有用,一定要投赞成票。其他人也应该有同样的机会找到有用的帖子 不久前在windows上使用python编写的scrapy spider时,我就有了这段功能代码,现在使用scrapy crawl时看起来是这样的 ScrapyPreactionWarning:不推荐从scrapy.xlib.pydispatch导入,并且在将来的scrapy版本中将不再支持>。如果您只想连接>信号,请使用from_crawler类方法,否则,如果>需要,请直接导入pydispatc

如果你发现这个问题研究得很好并且对你有用,一定要投赞成票。其他人也应该有同样的机会找到有用的帖子

不久前在windows上使用python编写的scrapy spider时,我就有了这段功能代码,现在使用scrapy crawl时看起来是这样的

ScrapyPreactionWarning:不推荐从scrapy.xlib.pydispatch导入,并且在将来的scrapy版本中将不再支持>。如果您只想连接>信号,请使用from_crawler类方法,否则,如果>需要,请直接导入pydispatch。请参阅:from>scrapy.xlib.pydispatch导入调度程序

我查看了他们的github论坛页面以获得解释,然后用PyDispatcher 2.0.5替换了这个包,返回的结果是该包不在我的conda环境中(它是),但是他们提到添加from_crawler方法作为问题的解决方案。我不知道怎么做

在第三条评论中,他们这样说

@类方法 来自_爬虫程序的def(cls、爬虫程序、*args、**kwargs): spider=super(MySpider,cls)。来自_crawler(crawler,*args,**kwargs) 爬虫。信号。连接(spider.spider\u打开,信号。spider\u打开) 回程卡盘

正如Luiz和tomjn所建议的,信号似乎是交替运行此脚本的解决方案。但是,self在整个脚本中使用,def spider_closed用于这里的操作,我不确定如何将其更改为使用from_crawler方法

def spider_closed(self, spider):
        sql = "DELETE FROM images WHERE EventDate < NOW() - INTERVAL 3 DAY"
        self.cursor.execute(sql)
        sql = "DELETE FROM dialy_items WHERE EventDate < NOW() - INTERVAL 3 DAY"
        self.cursor.execute(sql)
        self.cnx.commit()

        self.cursor.close()
        self.cnx.close()
def spider_关闭(自身,spider):
sql=“从EventDate
解决方案是使用内置来完成您正在使用
pydispatch
执行的操作。例如,将
\uuuu init\uuuu
方法替换为来自爬虫的

@classmethod
def from_crawler(cls, crawler, *args, **kwargs):
    spider = super(GetdataSpider, cls).from_crawler(crawler, *args, **kwargs)
    crawler.signals.connect(spider.spider_closed, signals.spider_closed)
    return spider

你的spider中真的有一个叫做
self.spider\u closed
的方法吗?如果没有,您真的不需要连接任何信号,因为Scrapy已经将
spider\u closed
信号连接到默认的
spider\u closed
方法。事实上,根据您显示的代码,不需要
\uuuu init\uuuuu
、crawler
pydispatch

我想他们已经找到了您想要的答案。如果这没有用,请告诉我。这似乎也是路易斯在回答中所写的,用信号代替这些方法。这应该是一个答案,但我不确定如何将其附加到我的脚本中。我认为您应该用@Luiz.that done给出的代码替换
\uuuu init\uuuu
函数。请查看上面的帖子。非常感谢您的回复,当您致力于找到解决方案时,请更新此帖子?是的,稍后脚本将使用自我,请参阅update@EmpireLearning你试着采纳我的建议了吗?更改我提到的内容时,您是否遇到了错误?是的,我在代码中使用了建议,运行了文件,但什么也没发生,没有错误,但程序没有执行。它应该打开,也应该用信息填充数据库(这是我的测试)
@classmethod
def from_crawler(cls, crawler, *args, **kwargs):
    spider = super(GetdataSpider, cls).from_crawler(crawler, *args, **kwargs)
    crawler.signals.connect(spider.spider_closed, signals.spider_closed)
    return spider