Scrapy抓取壁紙圖片

1 安裝Scrapy

Scrapy是一個(gè)為了爬取網(wǎng)站數(shù)據(jù),提取結(jié)構(gòu)性數(shù)據(jù)而編寫的應(yīng)用框架。 可以應(yīng)用在包括數(shù)據(jù)挖掘,信息處理或存儲(chǔ)歷史數(shù)據(jù)等一系列的程序中陈惰。

本文編寫一個(gè)簡(jiǎn)單的Python 爬蟲用于抓取http://desk.zol.com.cn/的部分壁紙。

開發(fā)環(huán)境是mac OS ,python 版本是2.7.

step1 需要先安裝python 的虛擬環(huán)境毕籽。virtualenv可以搭建虛擬且獨(dú)立的python環(huán)境抬闯,可以使每個(gè)項(xiàng)目環(huán)境與其他項(xiàng)目獨(dú)立開來,保持環(huán)境的干凈影钉,解決包沖突問題画髓。

  pip install virtualenv

創(chuàng)建一個(gè)虛擬且獨(dú)立空間。env 是虛擬環(huán)境的名稱

virtualenv env

啟動(dòng)虛擬環(huán)境(就是運(yùn)行 目錄env/bin 下的activate 文件)

. env/bin/activate

step2 安裝Scrapy平委。

pip install Scrapy

安裝Python 圖形處理庫(kù),下載圖片時(shí)需要使用到這個(gè)庫(kù)奈虾。

pip install Pillow

step3 創(chuàng)建項(xiàng)目 ,download 是項(xiàng)目名稱。

scrapy startproject download

2 編寫爬蟲

  1. 定義抓取的Item廉赔。第一步是定義我們需要爬取的數(shù)據(jù)結(jié)構(gòu)肉微。

    items.py

    import scrapy   
    class DownloadItem(scrapy.Item):
        # define the fields for your item here like:
        # name = scrapy.Field()
        image_urls = scrapy.Field() //圖片的網(wǎng)址
        images = scrapy.Field() //圖片信息 scrapy 自動(dòng)獲取的
        images_page_url = scrapy.Field()
        images_catalog = scrapy.Field() //圖片的存放目錄
    
  2. 編寫網(wǎng)絡(luò)爬蟲。在spiders目錄下新建一個(gè)文件dmoz_spider.py蜡塌,用于編寫爬蟲邏輯碉纳。我使用Chrome瀏覽器的開發(fā)者工具對(duì)網(wǎng)站的結(jié)構(gòu)進(jìn)行分析,使用scrapy 選擇器提取響應(yīng)的信息馏艾。

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
        
    import scrapy
    from download.items import DownloadItem
        
    class DmozSpider(scrapy.Spider):
        name = "download"
        allowed_domains = ["zol.com.cn"]
        start_urls = [
            "http://desk.zol.com.cn/"
        ]
        
        def parse(self, response):
            #連接到圖片內(nèi)容頁(yè)面
            for sel in response.xpath('//a[@class="pic"]'):
                shortUrl = sel.xpath('@href').extract()[0]
                url = response.urljoin(shortUrl)
                yield scrapy.Request(url, callback=self.parse_article) #連接到內(nèi)容頁(yè)的調(diào)用劳曹,在回調(diào)函數(shù)處理奴愉。
                
            #連接到圖片內(nèi)容頁(yè)面
            for sel in response.xpath('//a[@class="title"]'):
                shortUrl = sel.xpath('@href').extract()[0]
                url = response.urljoin(shortUrl)
                yield scrapy.Request(url, callback=self.parse_article)
        
        #真正下載圖片的處理函數(shù)
        def parse_article(self, response):
            item = DownloadItem()
            bigImgUrl = response.xpath('//img[@id="bigImg"]/@src').extract() #獲取圖片的URL
            
            item['image_urls'] = bigImgUrl
            item['images_page_url'] = response.url
            url = response.url
            catalog = url.split('_')[-3]
            catalog = catalog.split('/')[-1]
            item['images_catalog'] = catalog #獲取圖片的目錄 用于存放圖片
            yield item
        
            nextPageUrl = response.xpath('//a[@id="pageNext"]/@href').extract()[0] #下一頁(yè)
            
            if nextPageUrl.index('.html') >= 0:
                url = response.urljoin(nextPageUrl);
                yield scrapy.Request(url, callback=self.parse_article)
    
    

3 保存圖片

  1. 圖片的保存需要用到Scrapy 的圖片處理Pipe。在setting.py中設(shè)置铁孵。先使用scrapy.pipelines.images.ImagesPipeline保存圖片锭硼,再使用自己編寫的 download.pipelines.DownloadPipeline對(duì)圖片分類處理。

    在setting.py 中設(shè)置蜕劝。

     BOT_NAME = 'download'
     
     SPIDER_MODULES = ['download.spiders']
     NEWSPIDER_MODULE = 'download.spiders'
     
     #同時(shí)使用圖片和文件管道
     ITEM_PIPELINES = {
                       'scrapy.pipelines.images.ImagesPipeline': 1,
                       'download.pipelines.DownloadPipeline':2,
                       }
     IMAGES_STORE = '/Users/superzhan/Documents/project/python/Scrapy/download/' # 圖片存儲(chǔ)路徑
    
  2. 爬蟲抓去到的數(shù)據(jù)需要通過pipelines 來分類保存檀头。在pipelines.py 中對(duì)下載到的圖片進(jìn)行分類保存。

    # -*- coding: utf-8 -*-
     
     import os
     import shutil
     
     class DownloadPipeline(object):
     
         #move file
         def process_item(self, item, spider):
             curPath = '/Users/superzhan/Documents/Project/python/Scrapy/download/'
             
             #分類后的圖片目錄
             targetPath ='/Users/superzhan/Documents/Project/python/Scrapy/download/Img/'
     
              #創(chuàng)建分類目錄
             catalog = item['images_catalog']
             targetCatalog = os.path.join(targetPath,catalog)
             if False == os.path.exists(targetCatalog):
                 os.mkdir(targetCatalog)
             
             images_path= item['images'][0]['path']
             full_image_path = os.path.join(curPath,images_path)
             target_image_path = os.path.join(targetCatalog,full_image_path.split('/')[-1])
             
             #分類
             shutil.move(full_image_path,target_image_path)
     
             return item
    
  1. 最后切換到項(xiàng)目的根目錄岖沛,執(zhí)行

    scrapy crawl download -o items.json
    

    開始抓取圖片暑始。

4 代碼下載

百度網(wǎng)盤https://pan.baidu.com/s/1nv32Y6l

實(shí)際使用時(shí)需要修改setting.py和pipelines.py的下載路徑。

5 參考資料

  1. 官方文檔 http://scrapy-chs.readthedocs.io/zh_CN/0.24/index.html
  2. Scrapy筆記系列 http://www.pycoding.com/2016/03/08/scrapy-01.html
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末婴削,一起剝皮案震驚了整個(gè)濱河市廊镜,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌馆蠕,老刑警劉巖期升,帶你破解...
    沈念sama閱讀 218,546評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件惊奇,死亡現(xiàn)場(chǎng)離奇詭異互躬,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)颂郎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門吼渡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人乓序,你說我怎么就攤上這事寺酪。” “怎么了替劈?”我有些...
    開封第一講書人閱讀 164,911評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵寄雀,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我陨献,道長(zhǎng)盒犹,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,737評(píng)論 1 294
  • 正文 為了忘掉前任眨业,我火速辦了婚禮急膀,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘龄捡。我一直安慰自己卓嫂,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,753評(píng)論 6 392
  • 文/花漫 我一把揭開白布聘殖。 她就那樣靜靜地躺著晨雳,像睡著了一般行瑞。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上餐禁,一...
    開封第一講書人閱讀 51,598評(píng)論 1 305
  • 那天蘑辑,我揣著相機(jī)與錄音,去河邊找鬼坠宴。 笑死洋魂,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的喜鼓。 我是一名探鬼主播副砍,決...
    沈念sama閱讀 40,338評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼庄岖!你這毒婦竟也來了豁翎?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,249評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤隅忿,失蹤者是張志新(化名)和其女友劉穎心剥,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體背桐,經(jīng)...
    沈念sama閱讀 45,696評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡优烧,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,888評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了链峭。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片畦娄。...
    茶點(diǎn)故事閱讀 40,013評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖弊仪,靈堂內(nèi)的尸體忽然破棺而出熙卡,到底是詐尸還是另有隱情,我是刑警寧澤励饵,帶...
    沈念sama閱讀 35,731評(píng)論 5 346
  • 正文 年R本政府宣布驳癌,位于F島的核電站,受9級(jí)特大地震影響役听,放射性物質(zhì)發(fā)生泄漏颓鲜。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,348評(píng)論 3 330
  • 文/蒙蒙 一禾嫉、第九天 我趴在偏房一處隱蔽的房頂上張望灾杰。 院中可真熱鬧,春花似錦熙参、人聲如沸艳吠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)昭娩。三九已至凛篙,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間栏渺,已是汗流浹背呛梆。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留磕诊,地道東北人填物。 一個(gè)月前我還...
    沈念sama閱讀 48,203評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像霎终,于是被迫代替她去往敵國(guó)和親滞磺。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,960評(píng)論 2 355

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

  • scrapy學(xué)習(xí)筆記(有示例版) 我的博客 scrapy學(xué)習(xí)筆記1.使用scrapy1.1創(chuàng)建工程1.2創(chuàng)建爬蟲模...
    陳思煜閱讀 12,702評(píng)論 4 46
  • 題記 上一篇爬的是www.dy2018.com莱褒,其實(shí)只是爬了電影列表中的標(biāo)題和電影詳細(xì)頁(yè)鏈接而已击困,并沒有對(duì)爬電影的...
    無(wú)事扯淡閱讀 2,140評(píng)論 6 16
  • 本文分為兩部分,去哪兒網(wǎng)圖片爬蟲和Scrapy使用詳解广凸。Scrapy使用詳解基于去哪兒網(wǎng)圖片爬蟲進(jìn)行解析說明阅茶。 去...
    一只好奇的茂閱讀 1,782評(píng)論 1 26
  • 有半個(gè)月沒有更新了,最近確實(shí)有點(diǎn)忙谅海。先是華為的比賽脸哀,接著實(shí)驗(yàn)室又有項(xiàng)目,然后又學(xué)習(xí)了一些新的知識(shí)胁赢,所以沒有更新...
    qiye閱讀 9,904評(píng)論 35 87
  • 1.感謝兒子們聽著喜馬拉雅愉悅的醒來企蹭,感謝喜馬拉雅白筹,謝謝謝謝謝謝智末! 2.感謝兒子們?cè)谕瓿沙科鹎鍐味加袝r(shí)間多,有時(shí)間...
    霖霄霦閱讀 709評(píng)論 0 1