【问题标题】:How to pass arguments (for FEED_URI) to Scrapy spider's instane for dynamically naming output file如何将参数(用于 FEED_URI)传递给 Scrapy 蜘蛛的实例以动态命名输出文件
【发布时间】:2023-03-22 00:53:01
【问题描述】:

我想将参数发送给蜘蛛并获取根据参数命名的输出(json、csv)。
菲,
$ scrapy crawl spider_name -a category=category1 -a subcategory=subcategory1

我想得到:
category1_subcategory1.json(或csv,没关系)。
我的意思是我需要准确的 json 名称作为蜘蛛的参数。

class MySpider(scrapy.Spider):

name = 'my_spider'
# how can I get to this place ?
customs_settings = {
  'FEED_URI' : 'some_name.json'
 }
def __init__(self, category, subcategory, *args, **kwargs):

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

    self.category = category
    self.subcategory = subcategory

【问题讨论】:

  • 你试过什么?您是否阅读过文档中的Storage URI parameters 部分?特别是 存储 URI 还可以包含在创建提要时被替换的参数。(...)任何其他命名参数都会被同名的蜘蛛属性替换。例如,在创建提要时,%(site_id)s 将被 spider.site_id 属性替换。
  • 我读过文档。当然,我错过了一些东西,但我找不到将参数与 FEED_URI 属性链接起来的方法
  • 试试FEED_URI='%(category)_%(subcategory).json'

标签: python scrapy


【解决方案1】:

您可以从__init__kwargs 获取这些参数并在FEED_URI 中使用,如下所示:

class MySpider(scrapy.Spider):
    name = 'my_spider'

    custom_settings = {
      'FEED_URI' : '%(category)s_%(subcategory)s.json'
     }

    def __init__(self, *args, **kwargs):
        self.category = kwargs.pop('category', '')
        self.subcategory = kwargs.pop('subcategory', '')
        super(MySpider, self).__init__(*args, **kwargs)
        

文档:https://doc.scrapy.org/en/latest/topics/feed-exports.html#storage-uri-parameters

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-08
    • 2013-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多