Scrapy items的介绍与使用

Items

爬虫的主要目的就是从非数据结构性的数据源提取结构性的数据源,例如:在《Scrapy爬虫初步尝试》这篇博客中,我们已经爬取到了伯乐在线,所有的文章信息(从中爬取了文章的创建时间,标题,评论数,点赞数,收藏数等相关字段)。如何返回提取的数据呢?Scrapy可以以Python的dict来返回提取的数据,虽然这样很方便,用起来也很方便,但其缺少结构性,比如:我们在爬取伯乐在线的时候,收藏数用的是mark_num,但是,在爬取另外一个网站时用到的是fav_num,这样就很容易造成返回的数据不一致的问题。

为了定义常用的输出数据,Scrapy提供了Item类。Item对象是种简单的容器,保存了爬取得到的数据。其提供了类似于字典的API以及用于声明可用字段的简单语法。

除此之外,Scrapy组件使用了Item提供的额外信息:exporter根据Item声明的字段来导出数据、序列化可以通过Item的元数据(metadata)来定义、trackref追踪Item的实例来帮助寻找内存泄露。

  1. 声明Item(Item使用简单的class定义语法以及Field对象来声明)。例如:

还是以jobbole爬取来说明,保存我们在伯乐在线爬取到的相关数据。

class ArticleItem(scrapy.Item):
    title = scrapy.Field()  #文章标题
    create_date = scrapy.Field()  #创建日期
    url = scrapy.Field()   #url
    url_object_id = scrapy.Field()  #url的md5值
    front_image_url = scrapy.Field() #封面图路径
    front_image_path = scrapy.Field() #本地保存路径
    parse_num = scrapy.Field()  #点赞数
    mark_num = scrapy.Field()  #收藏数
    comments_num = scrapy.Field() #评论数
    tags = scrapy.Field()  #标签
    content = scrapy.Field()  #文章内容

关于Field对象:Field对象指明了每个对象的元数据(metadata)。可以为每个字段指明任何类型的元数据。需要注意的是,用来声明item的Field对象并没有被赋值class的属性。不过可以通过Item.fields属性进行访问。

  1. 实例化一个item对象
#实例化一个item对象
article_item = JobboleArticleItem()
  1. 为item对象赋值
article_item["title"] = title
article_item["create_date"] = create_date
article_item["url"] = response.url
article_item["front_image_url"] = img_url
article_item["praise_num"] = praise_num
article_item["mark_num"] = mark_num
article_item["comments_num"] = comments_num
article_item["tags"] = tags
article_item["content"] = content
  1. 获取字段的值
article_item["title"]
article_item.get("title","")

1.获取所有取到的值

article_item.keys()
article_item.items()

转载于:https://my.oschina.net/u/2968127/blog/896318

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值