使用Scrapy ItemLoaders爬取整站圖片

先看一下Item Loaders的說明蝇完,官網(wǎng)對ItemLoaders的介紹是,如果想要保存單個數(shù)據(jù)或者對數(shù)據(jù)執(zhí)行額外的處理,那將是 Item Loaders發(fā)揮作用的地方。

Item Loaders provide a convenient mechanism for populating scraped Items.

Item Loaders are designed to provide a flexible, efficient and easy mechanism for extending and overriding different field parsing rules, either by spider, or by source format (HTML, XML, etc) without becoming a nightmare to maintain.

一句話兑宇,ItemLoader提供了一種簡單高效,可擴展的方式來填充字段粱坤。

本文重點是在Scrapy中使用ItemLoaders下載圖片隶糕,先對比一下Item和ItemLoader。

一站玄、Items使用

Item的作用是把非結構性的數(shù)據(jù)源(網(wǎng)頁)提取為結構性的數(shù)據(jù)枚驻。Item
對象是種簡單的容器,保存了爬取到得數(shù)據(jù)蜒什〔饨眨可以理解為對象疤估。

** 1) 聲明定義Item:**

from scrapy import Field,Item

class ImageloadItem(Item):
    url = Field()
    name = Field()
    tags = Field()
    image_urls = Field()
    images = Field()

Item中沒有不同字段類型(數(shù)據(jù)類型)灾常,字段類型由存入時的數(shù)據(jù)類型決定。

2) 在Spider中設置字段的值:

 item = ImageloadItem()
 item['url']= response.url
 item['name'] = name     #name在之前已提取
 item['tag'] = tag       #tag在之前已提取
 ... ....

 return item  #提交item

當Item在Spider中被收集之后铃拇,它將會被傳遞到Item Pipeline钞瀑,一些組件會按照一定的順序執(zhí)行對Item的處理。

二慷荔、ItemLoader使用

同樣需要定義Item雕什,ItemLoader 用在Spider保存數(shù)據(jù)。

   def parse_item(self, response):

        l = ItemLoader(item=ImagetestItem(), response=response)
        l.add_xpath('name', '//h2/a/text()')
        l.add_xpath('tags', "http://div[@id='maincontent']/div[@class='postmeta  clearfix']/div[@class='metaRight']/p")
        l.add_xpath('image_urls', "http://div[@id='picture']/p/img/@src", Identity())  

        ## 上面image_urls 提取的是一組圖片的src數(shù)據(jù)

        l.add_value('url', response.url)

        return l.load_item()   #提交數(shù)據(jù)到pipeline處理

此處使用Itemloader提交了一組數(shù)據(jù)显晶,如果使用Item這里應該使用循環(huán)贷岸,提交單個數(shù)據(jù)。

PipeIine處理數(shù)據(jù)

class ImageloadPipeline(object):
    def process_item(self, item, spider):

        for image_url in item['image_urls']:
            print image_url
            ##  處理下載圖片...
        return item

在這里循環(huán)處理圖片的下載磷雇。

啟用Item Pipeline組件偿警,在settings.py配置:

ITEM_PIPELINES = {'imagetest.pipelines.ImageloadPipeline': 1}

分配給每個類的整型值,確定了他們運行的順序唯笙,item按數(shù)字從低到高的順序螟蒸,通過pipeline,通常將這些數(shù)字定義在0-1000范圍內(nèi)崩掘。

三七嫌、案例 -- 使用Scrapy下載整站圖片

案例為使用Scrapy爬蟲整站抓取妹子圖。http://www.meizitu.com/

下載的圖片

1) Scrapy Spider處理流程:

www.meizitu.com 這個站點苞慢,頁面分為3類:

  • 首頁 诵原,爬蟲入口,中部是圖片鏈接,下部有分頁信息
  • 列表頁绍赛,由分頁信息進來鞋拟,爬蟲獲得后續(xù)的url,每個列表頁下部有分頁
  • 內(nèi)容頁惹资,由首頁和列表頁url過來處理贺纲,獲得下載圖片的url
Spider處理流程

2) Spider中的方法:

  • parse()

    • 處理首頁圖片url, 調(diào)用parse_item()
    • 處理首頁上的分頁,獲得下一頁url褪测,調(diào)用parse()
    • 處理列表頁url, 獲得列表頁上圖片url猴誊,調(diào)用parse_item;處理頁面上分頁url, 獲得下一頁url侮措,遞歸調(diào)用parse()
  • parse_item()
    獲得內(nèi)容頁上的圖片url懈叹,圖片src保存在item loader中。

3) 在pipline中處理圖片下載

with open(file_path, 'wb') as handle:
                    response = requests.get(image_url, stream=True)
                    for block in response.iter_content(1024):
                        if not block:
                            break

                        handle.write(block)

另外分扎,防止爬蟲過度頻度訪問網(wǎng)站澄成,在setting.py中設置

DOWNLOAD_DELAY = 0.25    # 250 ms of delay
被限制訪問!

之前也寫了一篇文章《Python爬蟲框架Scrapy快速入門》 講到圖片下載畏吓,沒有用到ItemLoader墨状。大家可以參考。


參考:

  1. Spider0.25官方文檔
  2. 網(wǎng)絡代碼《Python使用Scrapy爬取妹子圖》

github下載

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末菲饼,一起剝皮案震驚了整個濱河市肾砂,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌宏悦,老刑警劉巖镐确,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異饼煞,居然都是意外死亡源葫,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進店門砖瞧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來息堂,“玉大人,你說我怎么就攤上這事芭届〈⒕兀” “怎么了?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵褂乍,是天一觀的道長持隧。 經(jīng)常有香客問我,道長逃片,這世上最難降的妖魔是什么屡拨? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任只酥,我火速辦了婚禮,結果婚禮上呀狼,老公的妹妹穿的比我還像新娘裂允。我一直安慰自己,他們只是感情好哥艇,可當我...
    茶點故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布绝编。 她就那樣靜靜地躺著,像睡著了一般貌踏。 火紅的嫁衣襯著肌膚如雪十饥。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天祖乳,我揣著相機與錄音逗堵,去河邊找鬼。 笑死眷昆,一個胖子當著我的面吹牛蜒秤,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播亚斋,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼作媚,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了伞访?” 一聲冷哼從身側響起掂骏,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤轰驳,失蹤者是張志新(化名)和其女友劉穎厚掷,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體级解,經(jīng)...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡冒黑,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了勤哗。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片抡爹。...
    茶點故事閱讀 39,722評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖芒划,靈堂內(nèi)的尸體忽然破棺而出冬竟,到底是詐尸還是另有隱情,我是刑警寧澤民逼,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布泵殴,位于F島的核電站,受9級特大地震影響拼苍,放射性物質發(fā)生泄漏笑诅。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望吆你。 院中可真熱鬧弦叶,春花似錦、人聲如沸妇多。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽者祖。三九已至默责,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間咸包,已是汗流浹背桃序。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留烂瘫,地道東北人媒熊。 一個月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像坟比,于是被迫代替她去往敵國和親芦鳍。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,614評論 2 353

推薦閱讀更多精彩內(nèi)容

  • scrapy學習筆記(有示例版) 我的博客 scrapy學習筆記1.使用scrapy1.1創(chuàng)建工程1.2創(chuàng)建爬蟲模...
    陳思煜閱讀 12,696評論 4 46
  • 序言第1章 Scrapy介紹第2章 理解HTML和XPath第3章 爬蟲基礎第4章 從Scrapy到移動應用第5章...
    SeanCheney閱讀 15,068評論 13 61
  • 有半個月沒有更新了葛账,最近確實有點忙柠衅。先是華為的比賽,接著實驗室又有項目籍琳,然后又學習了一些新的知識菲宴,所以沒有更新...
    qiye閱讀 9,876評論 35 87
  • 吃完早飯帶著小麥子跟爸爸一起出門了。本來是要去菜場買南瓜做饅頭的趋急,結果小麥子在外面逛了一大圈喝峦。還跑去賣汾酒的地方玩...
    孫追光閱讀 358評論 0 0
  • 非常有幸能夠參加此次華北區(qū)境外保險培訓班,滿滿一天半的課程下來呜达,收獲頗豐谣蠢。 首先感謝領導的大力支持、老師們的精彩分...
    lily小莉啊閱讀 545評論 1 4