我是Scrapy和网络抓狂的新手,所以这可能是一个愚蠢的问题,但这不是第一次这样。
我有一个简单的Scrapy蜘蛛,基于教程示例,处理各种URL(在start_urls中)。我想对网址进行分类,例如URL A,B和C是类别1,而URL D和E是类别2,然后当解析器处理每个URL的响应时,能够将类别存储在结果项上。
我想我可以为每个类别设置一个单独的蜘蛛,然后只需将类别作为属性保存在类中,这样解析器就可以从那里获取它。但我有点希望我的所有URL都只有一个蜘蛛,但告诉解析器哪个类别用于给定的URL。
现在,我正在通过我的蜘蛛的 init ()方法在start_urls中设置网址。如何将我的 init 方法中给定URL的类别传递给解析器,以便我可以在从该URL的响应中生成的项目上记录类别?
答案 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
,也是如此。