首页 文章

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

提问于
浏览
0

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

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

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

现在,我'm setting up the URLs in start_urls via my spider' s init ()方法 . 如何将我的 init 方法中给定URL的类别传递给解析器,以便我可以在从该URL的响应生成的项目上记录类别?

1 回答

  • 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 ,则同样如此 .

相关问题