通过scrapy中的回调函数传递元元素

时间:2014-07-09 10:51:44

标签: python web-scraping scrapy

当我通过回调函数传递元素时,就像官方scrapy documentation.

中的示例一样

我想知道在item函数中是否可以检索在上述函数内部修改后传递给parse_page2的元素parge_page1

我的意思是假设下面的例子。在parse_page2函数中,我们将response.url添加到'other_url'字段中。

parse_page1执行完成后,是否存在在parse_page2内获取'other_url'的方法?

def parse_page1(self, response):
    item = MyItem()
    item['main_url'] = response.url
    request = scrapy.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

1 个答案:

答案 0 :(得分:2)

您可以简单地在元数据集中传递response.url,而不是在parse_page1函数中创建项目,并在parse_page2函数中创建项目。

def parse_page1(self, response):
    return Request(url="http://www.example.com/some_page.html",
                   meta={'main_url':reponse.url},
                   callback=self.parse_page2)

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

或者,如果你真的想从parse_page2返回信息,你可以回调parse_page1,并在你的函数中添加一个条件:

def parse_page1(self, response):
    if "other_url" in response.meta:
        do something
    else:
        do something else