1

我想要做的是将 item.py 中定义的项目字段填充到 spider.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 中的其他字段将在下一个函数中填充,并再次传递给另一个解析器方法。会是合法的吗?

4

1 回答 1

7

这正是meta论证的内容,例如:

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设置字段并返回项目。

希望这就是你要问的。

于 2014-09-06T22:01:51.627 回答