爬蟲的主要目的就是從非數據結構性的數據源提取結構性的數據源,例如:在《Scrapy爬蟲初步嘗試》這篇博客中,咱們已經爬取到了伯樂在線,全部的文章信息(從中爬取了文章的建立時間,標題,評論數,點贊數,收藏數等相關字段)。如何返回提取的數據呢?Scrapy能夠以Python的dict來返回提取的數據,雖然這樣很方便,用起來也很方便,但其缺乏結構性,好比:咱們在爬取伯樂在線的時候,收藏數用的是mark_num,可是,在爬取另一個網站時用到的是fav_num,這樣就很容易形成返回的數據不一致的問題。數據結構
爲了定義經常使用的輸出數據,Scrapy提供了Item類。Item對象是種簡單的容器,保存了爬取獲得的數據。其提供了相似於字典的API以及用於聲明可用字段的簡單語法。scrapy
除此以外,Scrapy組件使用了Item提供的額外信息:exporter根據Item聲明的字段來導出數據、序列化能夠經過Item的元數據(metadata)來定義、trackref追蹤Item的實例來幫助尋找內存泄露。網站
仍是以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
#實例化一個item對象 article_item = JobboleArticleItem()
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
article_item["title"] article_item.get("title","")
1.獲取全部取到的值對象
article_item.keys() article_item.items()