Scrapy items的介绍与使用

Items

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

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

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

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

仍是以jobbole爬取来讲明,保存咱们在伯乐在线爬取到的相关数据。url

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属性进行访问。code

  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()
相关文章
相关标签/搜索