【问题标题】:Python Scrapy: passing properties into parserPython Scrapy:将属性传递给解析器
【发布时间】:2014-02-05 16:35:03
【问题描述】:

我是 Scrapy 和一般网络抓取的新手,所以这可能是一个愚蠢的问题,但它不会是第一次,所以这里是。

我有一个基于教程示例的简单 Scrapy 蜘蛛,它处理各种 URL(在 start_urls 中)。我想对 URL 进行分类,例如URL A、B 和 C 是类别 1,而 URLS D 和 E 是类别 2,然后能够在解析器处理每个 URL 的响应时将类别存储在结果项上。

我想我可以为每个类别设置一个单独的蜘蛛,然后将类别作为属性保存在类中,这样解析器就可以从那里获取它。但我有点希望我可以为所有 URL 设置一个蜘蛛,但告诉解析器对给定 URL 使用哪个类别。

现在,我正在通过我的蜘蛛的 init() 方法在 start_urls 中设置 URL。如何将给定 URL 的类别从我的 init 方法传递到解析器,以便我可以在从该 URL 的响应生成的项目上记录类别?

【问题讨论】:

标签: python scrapy


【解决方案1】:

正如保罗。建议:

class MySpider(CrawlSpider):

    def start_requests(self):
        ...
        yield Request(url1, meta={'category': 'cat1'}, callback=self.parse)
        yield Request(url2, meta={'category': 'cat2'}, callback=self.parse)
        ...

    def parse(self, response):
        category = response.meta['category']
        ...

您使用start_requests 来控制您访问的第一个 URL,将元数据附加到每个 URL,然后您可以通过 response.meta 访问该元数据。

例如,如果您需要将数据从 parse 函数传递到 parse_item,也是如此。

【讨论】:

  • 太棒了——这正是我所需要的。谢谢,伙计们!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-07-22
  • 2021-01-07
  • 2019-12-26
  • 2016-03-26
  • 1970-01-01
  • 2013-07-19
  • 2019-03-01
相关资源
最近更新 更多