在整个蜘蛛的不同功能的scrapy中填充物品

时间:2014-09-06 21:01:11

标签: python web-scraping scrapy scrapy-spider

我想要做的是在spider.py文件中的不同函数中填充item.py中定义的项目字段,比如在start_requests函数中,所有请求都在这里,我想填写一个字段叫'item_id'。

def start_requests(self):
    forms = []
    for item in self.yhd_items:
        self.item["item_id"] = item.ItemCode
        forms.append(FormRequest(self.base_url + item.ItemCode, method='GET',
                                 callback = self.parse_search_result))

    return forms

请注意,我在init函数中创建了一个项目实例。 这样只填充item_id字段并传递给下一个解析器方法(parse_search_result)。 item.py中的其他字段将填入下一个函数,并再次传递给另一个解析器方法。 它会合法吗?

1 个答案:

答案 0 :(得分:4)

这正是meta argument的例子:

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

在这里,我们在parse_page1中定义一个项目实例,填充main_url字段,然后将该项目传递到parse_page2字典中的meta。在parse_page2中,设置other_url字段并返回该项。

希望这就是你所要求的。