scrapy.meta 简介
- scrapy.meta 是 scrapy 中 Reuqest 的元数据字典,为 dict 类型;
- scrapy.meta 在 scrapy 中用于给框架中 其他组件 和 响应处理函数 传递参数信息;
- 作为一个 python 字典,meta 有一个 get 方法,当第二个参数是一个默认值时,在第一个参数不在字典中的情况下发生,如果不存在第二个参数同时第一个参数又不存在字典中,则会引发 KeyError 异常;
例如:对于 request.meta.get('meta_key', 'default_value') ,如果没有从 meta 字典中获取到 'meta_key' 的值,则默认返回 'default_value'。
- meta 同时可应用在 request 和 response的参数传递中;
request.meta.get('meta_key', 'default_value')
response.meta.get('meta_key', 'default_value')
例子
- 在items模块中有下面三个参数:
import scrapy
class TextItem(spider.Item):
title = scrapy.Field()
price = scrapy.Field()
image = scrapy.Field()
- 在spider爬虫中:
class TaobaoSpider(scrapy.Spider):
name = ['taobao']
allowed_domains = ['www.taobao.com']
def parse1(self,response):
'''
需要知道的是item是一个字典
'''
item = TextItem()
for product in response.css('......').extract():
item['title'] = product.css('......').extract_first()
item['price'] = product.css('......').extract_first()
url = product.css('......').extract_first()
yield = scrapy.Request(url=url, meta={'item':item} callback=self.parse2)
'''
比如我们要爬取淘宝上的商品,我们在第一层爬取时候获得了标题(title)和价格(price),
但是还想获得商品的图片,就是那些点进去的大图片,假设点进去的链接是上述代码的url,
利用scrpy.Request请求url后生成一个Request对象,通过meta参数,把item这个字典赋值给meta字典的'item'键,
即meta={'item':item},这个meta参数会被放在Request对象里一起发送给parse2()函数。
'''
def parse2(self,response):
item = response.meta['item']
for product in response.css('......').extract():
item[imgae] = product.scc('......').extract_first()
return item
'''
这个response已含有上述meta字典,此句将这个字典赋值给item,完成信息传递。
这个item已经和parse中的item一样了
之后我们就可以做图片url提取的工作了,
数据提取完成后return item ,这样就完成了数据抓取的任务了。
'''
联系博主:下为博主微信,欢迎骚扰
网友评论