在爬虫的不同函数中填充scrapy项目项
我想做的是在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
注意,我在初始化函数里创建了一个items的实例。这样的话,只有item_id这个字段会被填充,然后传递到下一个解析方法(parse_search_result)。item.py里的其他字段会在下一个函数里填充,然后再传递给另一个解析方法。这样做合理吗?
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
字段,然后把这个项目放进meta
字典里传给parse_page2
。在parse_page2
中,我们设置了other_url
字段,并返回这个项目。
希望这正是你想问的内容。