1. 程式人生 > >二(1.scrapy)Scrapy--item

二(1.scrapy)Scrapy--item

Scrapy

文章僅供學習,如有錯誤,歡迎指出

1.建立專案 scrapy startproject tutorial

2.檔案目錄

tutorial/
    scrapy.cfg #專案的配置檔案
    tutorial/
        __init__.py #宣告包
        items.py    #專案中的item檔案,提取欄位內容
        pipelines.py #專案中的pipeline檔案
        settings.py  #設定檔案
        spiders/     #你的爬蟲專用檔案
            __init__.py  #聲名包
...

使用Item整理

Item物件是自定義的python字典。 您可以使用標準的字典語法來獲取到其每個欄位的值。(欄位即是我們之前用Field賦值的屬性):

for i in response('//ul/li'):
    item = DmozItem()#引用items.py下的類
    item['title'] = i.xpath().extract()
    ...
    yield item

儲存爬取到的資料

scrapy crawl spidername -o items.json

Item Pipeline

process_item(self, item, spider)

3.定製自己的Items

Item是爬取到的資料的容器,在這裡我們可以將自己爬取到的內容定義不同的欄位名。再通過parse的方法解析並讀取出來放到這裡

import scrapy

class DmozItem(scrapy.Item):
    title = scrapy.Field()
    link = scrapy.Field()
    desc = scrapy.Field()

​ 如果你學過django 那麼item欄位一定難不倒你, 你可以建立屬於自己的Item類,但是需要繼承的時Item類,比如一個網站你想爬取的內容很多,那麼你可以定義屬於自己的item類,並且用Field

去宣告。但是他並沒有對欄位進行分類,當你在之後想要存到資料庫時,就需要去修改他的形式。

Item在其他地方的引用


  from firstspider.items import DmozItem    #引用Item
    def parse_artical_text(self,response):
        pass

        item = bolezaixianSpiderItem()
        title = response.css('.grid-8 .entry-header h1::text')[0].extract()
        time =  response.css('.grid-8 .entry-meta p::text')[0].extract().strip().replace('·','').strip()
        theme = response.css('.grid-8 .entry-meta p a::text')[0].extract().strip()
        zan =   response.css('.grid-8 .post-adds span h10::text')[0].extract()
        fav = response.css('.grid-8 .post-adds span::text')[2].extract()
        fav_re = re.match('.*?(\d+).*',fav)
        if fav_re:
            fav = fav_re.group(1)
        else:
            fav=0

        item['title'] = title
        item['time'] = time
        item['theme'] = theme
        item['zan'] = zan
        item['fav'] = fav
        yield item

​ 這樣的處理方式一旦當欄位多的時候我們就會使得工作變得複雜,並且不好修改

#通過Item_load來簡化我們提取欄位的過程
from scrapy.loader import ItemLoader


item_loader = ItemLoader(item=bolezaixianSpiderItem,response=response)
item_loader.add_css('title','.grid-8 .entry-header h1::text')
item_loader.add_xpath('title','//id[@href ="sd"]')
item_loader.add_value('url',response.url)
item_loader.add_value('title',response.title)

​ 這樣的操作會讓我們容易後期的修改,add_css內只要輸入欄位名稱以及css篩選的程式碼就可以過濾出來。

但是有時候我們只要取一個值,這時候我們需要在items.py下去篩選。

​ Field()包含了兩種處理方法

from scrapy.loader.processors import MapCompose,TakeFirst

def cut_Item(value):   #這裡處理我們的接受到的資料
    return value+"dsd"  #處理資料

class test(scrapy.Item):
    title = scrapy.Field(
        input_process = MapCompose(cut_Item),   #自定義對欄位的處理方法
        output_process = TakeFirst() #取第一個,但是如果我們的欄位過多。這個時候我們可以自定義一個load
    )

當然如果我們指向要取第一位數字,我們只要聲名一個item類就可以了。

他有四個引數

class ItemLoader(object):

    default_item_class = Item
    default_input_processor = Identity()
    default_output_processor = Identity()
    default_selector_class = Selector

    def __init__(self, item=None, selector=None, response=None, parent=None, **context):
        if selector is None and response is not None:
            selector = self.default_selector_class(response)
        self.selector = selector
        context.update(selector=selector, response=response)
        if item is None:
            item = self.default_item_class()
        self.context = context
        self.parent = parent
        self._local_item = context['item'] = item
        self._local_values = defaultdict(list)
# from scrapy.loader import ItemLoader
#
# class  zidingyiItemload(ItemLoader):
#     default_output_processor = TakeFirst()

相關推薦

(1.scrapy)Scrapy--item

Scrapy 文章僅供學習,如有錯誤,歡迎指出 1.建立專案 scrapy startproject tutorial 2.檔案目錄 tutorial/ scrapy.cfg #專案的配置檔案 tutorial/

win7安裝python3.6.1scrapy

2-2 們的 obj rom 控制 first iter html studio ---恢復內容開始--- 第一篇博客,記錄自己自學python的過程及問題。 首先下載python3.6.1及所需資料 百度雲:https://pan.baidu.com/s/1geOEp6z

python 3.6.1 安裝scrapy踩坑之旅

ext href sta 版本 deb targe IE src pyw 系統環境:win10 64位系統安裝 python基礎環境配置不做過多的介紹 window環境安裝scrapy需要依賴pywin32,下載對應python版本的exe文件執行安裝,下載的pywin

Python爬蟲():Scrapy框架的配置安裝

Windows安裝方式 預設支援Python2、Python3,通過pip安裝Csrapy框架: pip install Scrapy Ubuntu(9.10以上版本)安裝方式 預設支援Python2、Python3,通過pip安裝Csrapy框架: sud

爬蟲記() - Idea安裝Scrapy & Scrapy入門

我用Intellij IDEA寫Python指令碼,IDEA裝上Python外掛之後跟PyCharm差不多。 安裝Scrapy 連結 Pycharm中的scrapy安裝教程 - xiaoli2018 - 部落格園 步驟 * 開啟IDEA的settings->

開啟Scrapy專案之旅之:用Scrapy進行專案爬蟲管理

1、進入scrapy資料夾下,建立Scrapy專案 scrapy startproject myfirstpjt 2、進入自己建立的scrapy專案中: cd myfirstpjt 進入後,我們可以對該爬蟲專案進行管理,可以通過工具命令實現,下節介紹。 3、爬蟲專

文字分類():scrapy爬取網易新聞

文字分類的第一項應該就是獲取文字了吧。 在木有弄懂scrapy的情況下寫的,純應用,或許後續會補上scrapy的原理。 首先說一下我的環境:ubuntu14.10 scrapy安裝指南(肯定官網的最權威了):[傳送門](http://scrapy-chs.rea

Python3.6.1scrapy框架安裝

我用了Python3.6安裝scrapy,杯具的是一直沒有成功。於是下載了3.6.1嘗試了一下,居然成功了! 說明一下:我的作業系統是Windows7 64位 以下步驟驗證了兩遍,希望能幫助各位道友。先說說下載資源 1. Python安裝包 python-3.6.1_32.

Python爬蟲從入門到放棄(十)之 Scrapy框架的架構和原理

執行 持久 pip 下載 響應 .py example 數據模型 特殊 原文地址https://www.cnblogs.com/zhaof/p/7173397.html 這一篇文章主要是為了對scrapy框架的工作流程以及各個組件功能的介紹 Scrapy目前已經可以很好的在

Python爬蟲-Scrapyitem loader

使用Scrapy爬取伯樂線上的文章,將爬取的資料儲存到MySQL資料庫中。 建立專案 使用Scrapy命令來建立專案。 梳理整體邏輯關係 我們先來分析一下整體的流程,我們想要獲取,文章的圖片,標題,釋出的時間,詳情頁的連結,點贊數,收藏數,評論數。我們首先需要獲取的是

UVM序列篇之:sequence和item(上)

技術 一點 目標 idt 需要 開始 掛載 ron 前行 無論是自駕item,穿過sequencer交通站,通往終點driver,還是坐上sequence的大巴,一路沿途觀光,最終跟隨導遊停靠到風景點driver,在介紹如何駕駛item和sequence,遵守什麽交規,最終

Python之旅 (基礎篇 1-25)

body 函數 closed 技術分享 items pop img -s 之間 字典:   字典是python中唯一的映射類型,采用鍵值對(key-value)的形式存儲數據。python對key進行哈希函數運算,根據計算的結果決定value的存儲地址,所以字典是無序存儲

JVM理論:(/1)內存分配策略

本地線程 準備 最大 機會 bubuko 空間不夠 嘗試 它的 日誌分析   Java技術體系中所提倡的自動內存管理最終可以歸結為自動化地解決兩個問題:給對象分配內存以及回收分配給對象的內存。 對象的分配可能有以下幾種方式: 1、JIT編譯後被拆散為標量類型並間接地棧上分配

Scrapy+Scrapy-redis+Scrapyd+Gerapy 分布式爬蟲框架整合

sta 端口 pro ron 配置文件 詳情 pre 流程 .py 簡介:給正在學習的小夥伴們分享一下自己的感悟,如有理解不正確的地方,望指出,感謝~ 首先介紹一下這個標題吧~ 1. Scrapy:是一個基於Twisted的異步IO框架,有了這個框架,我們就不需要等待當前U

信管1172潘連香資料結構實驗1

實驗內容 1、自己確定結點的具體資料型別和問題規模: 分別建立一個順序棧和鏈棧,實現棧的壓棧和出棧操作。 分別建立一個順序佇列和鏈佇列,實現佇列的入隊和出隊操作。 一、順序棧的定義與實現 #ifdef SeqStack_H      

清華EMBA課程系列思考之十(1) -- 經理人股權激勵

經理人股權激勵  - 謝德仁教授 -- 清華大學經濟管理學院 教授 博導  謝德仁教授早就嚮往股權激勵這門課了,企業所有者的重心始終是設定企業的長遠目標並且設定一套體系來保障企業經營者如何能夠按照目標來逐步實現企業的願景,而股權激勵作為維繫企業所有者與職業經理人之間的一根直接

QT:控制元件精講()單元檢視Item Views

    Qt Creator有4種Item Views。如圖     View Widget的Qt類和名稱介紹如下表:     控制元件類     控制元件名 &nb

scrapy | scrapy-redis實現分散式爬取:原理,實戰案例(虛擬機器)

1.概念:分散式爬蟲 由於需要爬取的資料量大,任務多,一臺機器效率太低,需要多臺機器共同協作處理。分散式爬蟲將多臺主機組合起來, 共同完成一個爬取任務,快速高效地提高爬取效率。 分散式爬蟲可以分為若干個分散式層級,不同的應用可能由其中部分層級構成。 大型分散式爬蟲主

從傳統服務端開發的角度來理解區塊鏈共識演算法. 為什麼 pbft 是三分之+1即2/3+1,paxos 是二分之一+11/2+1

  傳統服務端開發人員對 paxos,zab,raft 可能更熟悉. zab 和 raft 本質上是兩次選舉.實際上這是拜占庭問題的簡化版本,沒有叛徒.但是通訊通道可能被破壞.   公開環境中拜占庭錯誤容忍(bft b fault tolerance)會有破壞分子,例如加密貨幣中的 double pay 問題

Scrapy基礎————圖片下載後將本地路徑添加到Item

ica cal 行處理 pipe 思路 completed div self 狀態 前邊講到簡單的圖片下載,但是怎樣將圖片的本地路徑和存儲在Item中的數據對應起來,所以本篇博文講解到如何將 本地的下載後的圖片路徑寫入到Item中 思路:自定義pipli