使用scrapy來爬圖文

這樣的關(guān)鍵字能搜到很多很多文章米苹,可是,在我的實踐過程中砰琢,沒有一篇文章能夠待我穿過山和大海蘸嘶,也走過人山人海,相反陪汽,都是帶著我掉進(jìn)了坑训唱,陷進(jìn)了沼澤,掛在了樹上...

環(huán)境

python 叫做 Python3掩缓,版本 v3.6.1
os 是 Mac os
scrapy 版本 v1.3.3

我有一個小目標(biāo)雪情,先扒下來幾百張圖再說

感謝douban,讓我一次一次又一次地爬...
目標(biāo)網(wǎng)頁: https://www.douban.com/doulist/1295618/
它看起來是這樣的

中國內(nèi)地電影票房總排行

而我們的目標(biāo)你辣,是將這些 下載下來電影海報巡通,順便記錄一下排行榜到csv文件

使用Scrapy創(chuàng)建一個項目

如果沒有安裝Scrapy,可以參考我的另一篇文章安裝scrapy舍哄。我們這里使用命令生成一個腳手架

scrapy startproject douban

生成后的項目結(jié)構(gòu)如下(根目錄):

├── scrapy.cfg
└── scrapyspider                         # 項目目錄
    ├── items.py                         # 模型文件宴凉,定義要抓取的對象,后期修改
    ├── middlewares.py
    ├── pipelines.py                     # 以管道方式處理模型表悬,后期修改
    ├── settings.py                      # 項目配置文件弥锄,后期修改
    └── spiders                          # 爬蟲文件夾
        └── douban_spider.py             # 后期新增的爬蟲文件

需要注意:

  • 由于使用我們的管道繼承了scrapy的圖片管道,所以項目依賴Pillow的庫蟆沫,使用
python3 -m pip install pillow

來安裝PIL的依賴

  • 運行爬蟲時籽暇,需要切換到項目根目錄下,然后
scrapy crawl xxx

其中xxx是爬蟲的名字(注:不是文件名哦饭庞,是爬蟲的name屬性)

文件如下

setting.py

import os

BOT_NAME = 'douban'

SPIDER_MODULES = ['douban.spiders']
NEWSPIDER_MODULE = 'douban.spiders'

DOWNLOADER_DEBUG = True              #這5行不是必須的戒悠,只是為了調(diào)試方便
CONCURRENT_REQUESTS = 200         
AUTOTHROTTLE_DEBUG = True
AUTOTHROTTLE_ENABLED= True
DEPTH_STATS_VERBOSE = True           # 5行到這里

CUR_DIR = os.path.dirname(os.path.realpath(__file__))
IMAGES_STORE = os.path.join(CUR_DIR, '..', 'images')


ITEM_PIPELINES = {
    'douban.pipelines.DoubanPicPipelines': 1
}

COOKIE_ENABLE = False    # 建議有,不要記著我的臉舟山,不要cookie
DOWNLOAD_DELAY = 0.5    # 建議有绸狐,步子不要太大卤恳,否則容易扯著蛋

ROBOTSTXT_OBEY = False     # 必須有,否則你的爬蟲會按照robot.txt規(guī)則來決定能否爬當(dāng)前內(nèi)容

ITEM_PIPELINES 屬性描述了管道流寒矿,key是管道類的類名突琳,value是一個數(shù)字,用來描述任務(wù)優(yōu)先級符相,1就是最早執(zhí)行拆融,數(shù)字越大,執(zhí)行順序就越晚

pipelines.py

from scrapy.pipelines.images import ImagesPipeline
from scrapy.exceptions import DropItem
from scrapy import Request

class DoubanPicPipelines(ImagesPipeline):

    def get_media_requests(self,item,info):
        for image_url in item['image_urls']:
            yield Request(image_url)
    def item_completed(self,results,item,info):
        image_paths=[x['path'] for ok,x in results if ok]    # 這里的path是item自動加上的
        if not image_paths:
            raise DropItem('圖片未下載好 %s'%image_paths)

items.py

import scrapy

class DoubanItem(scrapy.Item):
    ranking = scrapy.Field()
    # movie's name
    movie_name = scrapy.Field()
    # score
    score = scrapy.Field()
    # comment count
    score_num = scrapy.Field()
    # image_urls
    image_urls = scrapy.Field()
    # image name
    images = scrapy.Field()

spiders/douban_spider.py

from scrapy.spiders import Spider
from scrapy.http import Request
from douban.items import DoubanItem
import re


class DoubanMovieSpider(Spider):
    name = 'movie'    # 這個名字決定了使用scrapy crawl movie來啟動爬蟲
    headers = {       # 沒有UA主巍,網(wǎng)站不待見你
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:54.0) Gecko/20100101 Firefox/54.0'
    }

    def start_requests(self):
        url = 'https://www.douban.com/doulist/1295618/'
        yield Request(url, headers=self.headers)

    def parse(self, response):
        item = DoubanItem()
        movies = response.xpath('//div[@class="doulist-item"]/div')
        for movie in movies:
            item['ranking'] = movie.xpath(
                './/span[@class="pos"]/text()').extract()[0]
            item['movie_name'] = movie.xpath(
                './/div[@class="title"]/a/text()').extract()[0]

            score = movie.xpath('.//span[@class="rating_nums"]/text()').extract()
            if score:
                score = score[0]
            else:
                score = 'N/A'
            item['score'] = score

            score_num = movie.xpath('.//div[@class="rating"]/span[3]').re(r'(\d+)')
            if score_num:
                score_num = score_num[0]
            else:
                score_num = 'N/A'
            item['score_num'] = score_num

            image_urls = movie.xpath('.//div[@class="post"]/a/img/@src').extract()
            item['image_urls'] = image_urls

            item['images'] = movie.xpath(
                './/div[@class="post"]/a/img/@src').re(r'[^/]*.[jpg|png|gif|webp]$')

            yield item

        # 處理分頁
        next_url = response.xpath('//span[@class="next"]/a/@href').extract()
        if next_url:
            yield Request(next_url[0], headers = self.headers)

運行爬蟲冠息,

scrapy crawl movie -o movies.cvs

稍等片刻,就能夠看到生成出來的cvs文件了孕索,使用wps打開,能夠看到漂亮的中文(office貌似是亂碼)

cvs文件躏碳,可以很方便排序
下載下來的海報
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末搞旭,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子菇绵,更是在濱河造成了極大的恐慌肄渗,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件咬最,死亡現(xiàn)場離奇詭異翎嫡,居然都是意外死亡,警方通過查閱死者的電腦和手機永乌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進(jìn)店門惑申,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人翅雏,你說我怎么就攤上這事圈驼。” “怎么了望几?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵绩脆,是天一觀的道長。 經(jīng)常有香客問我橄抹,道長靴迫,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任楼誓,我火速辦了婚禮玉锌,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘慌随。我一直安慰自己芬沉,他們只是感情好躺同,可當(dāng)我...
    茶點故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著丸逸,像睡著了一般蹋艺。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上黄刚,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天捎谨,我揣著相機與錄音,去河邊找鬼憔维。 笑死涛救,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的业扒。 我是一名探鬼主播检吆,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼程储!你這毒婦竟也來了蹭沛?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤章鲤,失蹤者是張志新(化名)和其女友劉穎摊灭,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體败徊,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡帚呼,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了皱蹦。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片煤杀。...
    茶點故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖根欧,靈堂內(nèi)的尸體忽然破棺而出怜珍,到底是詐尸還是另有隱情,我是刑警寧澤凤粗,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布酥泛,位于F島的核電站,受9級特大地震影響嫌拣,放射性物質(zhì)發(fā)生泄漏柔袁。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一异逐、第九天 我趴在偏房一處隱蔽的房頂上張望捶索。 院中可真熱鬧,春花似錦灰瞻、人聲如沸腥例。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽燎竖。三九已至璃弄,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間构回,已是汗流浹背夏块。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留纤掸,地道東北人脐供。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像借跪,于是被迫代替她去往敵國和親政己。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,927評論 2 355

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