Scrapy CrawlSpider:如何在不同的解析级别访问项目

问题描述 投票:5回答:1

我正在爬网一个网站(只有两个级别),我想从两个级别的网站上抓取信息。我遇到的问题是,我想用两个级别的信息来填写一项的字段。我该怎么做?

我以为有一个项目列表作为实例变量可以被所有线程访问(因为它是Spider的相同实例),并且parse_1将填写一些字段,而parse_2将必须检查正确的密钥在填写相应的值之前。该方法似乎很麻烦,我仍然不确定如何使它起作用。

我在想的是,必须有更好的方法,也许以某种方式将项目传递给回调。我不知道如何使用Request()方法做到这一点。想法?

python web-scraping scrapy web-crawler multi-level
1个回答
9
投票

从scrapy文档:

在某些情况下,您可能希望将参数传递给这些回调函数,以便稍后可以在第二个回调中接收参数。您可以为此使用Request.meta属性。

这里是如何使用此机制传递项目,以填充来自不同页面的不同字段的示例:

def parse_page1(self, response):
    item = MyItem()
    item['main_url'] = response.url
    request = Request("http://www.example.com/some_page.html",
                      callback=self.parse_page2)
    request.meta['item'] = item
    return request

def parse_page2(self, response):
    item = response.meta['item']
    item['other_url'] = response.url
    return item

因此,基本上,您可以抓取第一页并将所有信息存储在项目中,然后发送带有第二级URL请求的整个项目,并将所有信息都包含在一个项目中。


0
投票

如果涉及基础蜘蛛并且问题与爬网蜘蛛有关,为什么这个答案被接受?

© www.soinside.com 2019 - 2024. All rights reserved.