Python Scrapy:将属性传递给解析器

时间:2014-02-05 16:35:04

标签: python scrapy

我是Scrapy和网络抓狂的新手,所以这可能是一个愚蠢的问题,但这不是第一次这样。

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

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

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

1 个答案:

答案 0 :(得分: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来控制您正在访问的第一个网址,将元数据附加到每个网址,然后您可以通过response.meta访问该元数据。

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