不幸的是,我没有足够的人口来发表评论,所以我不得不提出这个新问题,涉及https://stackoverflow.com/questions/23105590/how-to-get-the-pipeline-object-in-scrapy-spider
我在一个数据库中有很多url。所以我想从我的数据库中获取start_url。到目前为止还不是一个大问题。我不想让mysql的东西在蜘蛛和管道中,我会遇到一个问题。如果我试图像在参考问题中那样将管道对象交给我的蜘蛛,我只会得到一个属性错误消息
'None Type' object has no attribute getUrl
我认为实际的问题是函数spider_opened没有被调用(还插入了一个print语句,该语句从未在控制台中显示其输出)。有人知道如何在spider中获得管道对象吗?
MySpider.py
def __init__(self):
self.pipe = None
def start_requests(self):
url = self.pipe.getUrl()
scrapy.Request(url,callback=self.parse)
Pipeline.py
@classmethod
def from_crawler(cls, crawler):
pipeline = cls()
crawler.signals.connect(pipeline.spider_opened, signals.spider_opened)
def spider_opened(self, spider):
spider.pipe = self
def getUrl(self):
...
2条答案
按热度按时间0s7z1bwu1#
报废管线已有
open_spider
和close_spider
的预期方法取自文档:https://doc.scrapy.org/en/latest/topics/item-pipeline.html#open_spider
open_spider(自身,蜘蛛)
当Spider打开时调用此方法。
参数:spider(Spider对象)-打开的spider
close_spider(自身,蜘蛛)
此方法在网络扫描器关闭时调用。spider(Spider对象)-关闭的spider
然而,你最初的问题并没有多大意义,为什么你想把管道引用分配给你的蜘蛛?这似乎是一个非常糟糕的主意。
你应该做的是打开数据库并读取蜘蛛本身的url。
atmip9wb2#
我正在使用可接受的解决方案,但未按预期工作。
这是我这边的一个