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()
相關文章
相關標籤/搜索