scrapy将不同页面元素整理到同一个Item中

scrapy爬虫,将不同页面元素整理到同一个Item中
今天写scrapy过程时,碰到一个问题:需要将两个页面中的元素给整合到同一个 Item 中。
解决方法参见 官方文档
下面只是对官方文档做一下解释:
Example:

def parse_page1(self, response):
return scrapy.Request(“http://www.example.com/some_page.html”,
callback=self.parse_page2)

def parse_page2(self, response):
# this would log http://www.example.com/some_page.html
self.log(“Visited %s” % response.url)

def parse_page1(self, response):
    return scrapy.Request("http://www.example.com/some_page.html",
                          callback=self.parse_page2)

def parse_page2(self, response):
    # this would log http://www.example.com/some_page.html
    self.log("Visited %s" % response.url)

如果我想将 page1 与 page2 中的元素整合,直接通过二者的解析函数没办法做到。所以这个时候需要用到 meta 参数来传递数据信息。具体过程为:

在page1的页面解析函数中构造一个 Item 对象

然后将该 Item 对象作为元数据传递到 meta 中,meta是一个字典,除了一些内置关键字以外,用户可以自定义关键字。这里可以使用 meta[‘item’] = Item 构造这个键值对

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_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

再在page2的解析函数中,使用该数据对即可。

def parse_page2(self, response):
    item = response.meta['item']
    item['other_url'] = response.url
    return item
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_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  # 通过meta属性将parse_page1的Item传递到parse_page2中
    return request
def parse_page2(self, response):
    item = response.meta['item']
    item['other_url'] = response.url
    return item

总结:
上述 page1 中对新的 URL 进行对Request时,回调函数 callback 所指明的方法是 parse_page2。同时通过属性 meta 将 parse_page1 的 Item 传递给了 parse_page2 。通过这种操作可以将 page1 与 page2 中需要整合的元素整合到同一个 Item 中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值