在爬虫的不同函数中填充scrapy项目项

1 投票
1 回答
1532 浏览
提问于 2025-04-20 05:18

我想做的是在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字段,并返回这个项目。

希望这正是你想问的内容。

撰写回答