scrapy 如何将spider中的私有数据发送到pipeline?

gdrx4gfi  于 2022-11-09  发布在  其他
关注(0)|答案(1)|浏览(180)

说着,每次我跑得斗志旺盛的像下面

scrapy crawl [spidername] -a file='filename'

我想把文件名发送到pipeline来指定项的存储位置。每次的位置可能都不一样,所以它不能在settings.py中定义。
该文件在蜘蛛中保存为私有变量

def __init__(self,file):
  self.filename=file

如何将参数发送到管道?

cyvaqqii

cyvaqqii1#

有几种方法可以做到这一点。一种方法是将文件名定义为蜘蛛的init()方法中的一个参数,然后在调用process_item()方法时将其作为参数传递给管道。
另一种方法是将文件名定义为spider中的类变量,然后从管道中将其作为spider的属性进行访问。
下面是一个使用类变量执行此操作的示例:

class MySpider(Spider):
    filename = 'filename'

    def __init__(self, *args,**kwargs):
        super(MySpider, self).__init__(*args,**kwargs)

    def parse(self, response):
        # do stuff

    def process_item(self, item, spider):
        item['filename'] = spider.filename
        return item

相关问题