1. 程式人生 > >Scrapy豆瓣電影top250(excel儲存和圖片下載)

Scrapy豆瓣電影top250(excel儲存和圖片下載)

豆瓣電影top250url地址:https://movie.douban.com/top250?start=

一. 明確獲取資料資訊(item)
分析頁面上的內容可以獲取到的資料資訊是電影的名稱、導演、演員、簡介、上映時間、評分、參與評分人數、圖片的url地址.在scrapy的item專案中建立生成對應的。

    star = scrapy.Field()#  電影評分
    quote = scrapy.Field()# 電影簡介
    picture = scrapy.Field()#   電影圖片url
    jude = scrapy.Field()#  電影參與評論人數
dect = scrapy.Field()# 電影導演 演員 time = scrapy.Field()# 電影上映時間

二. 提取網頁資料資訊(spider)

 利用xpath來提取網頁上資訊,並在爬蟲專案中進行處理提取可用的資料.
    def parse(self, response):
        item = Top250Item()
        movie = response.xpath("//div[@class = 'item']")
        #  迭代獲取每一塊的資訊
        for each in movie:
            #   電影標題
item['title'] = each.xpath(".//div[@class ='info']//span[@class ='title'][1]/text()").extract()[0] # 該標籤含有大量資訊包括導演 演員 上映時間... Each = each.xpath(".//div[@class ='info']//div[@class ='bd']/p/text()").extract() # 導演 演員等 bd = Each[0] item['dect'
] = "".join(bd).replace("\n", "").replace("\xa0", "").strip() # 電影上映時間 time = Each[1] item['time'] = "".join(time).replace("\n", "").replace("\xa0", "").strip().split("/")[0] # 評分 item['star'] = each.xpath(".//div[@class ='info']//div[@class ='star']/span[@class ='rating_num']/text()").extract()[0] # 電影資訊簡介 quote = each.xpath(".//div[@class ='info']//p[@class = 'quote']/span/text()").extract() if len(quote) != 0: item['quote'] = quote[0] else: item['quote'] = "暫無介紹" # 圖片的url地址 item['picture'] = each.xpath(".//div[@class ='pic']//a/img/@src").extract()[0] # 參與電影評論人數 juede = each.xpath(".//div[@class ='info']//div[@class ='star']/span[4]/text()").extract()[0] item['jude'] = juede[:-3] yield item
 根據需求訪問所有的url地址,尋找規則。
class QSpider(scrapy.Spider):
    name = 'q'#爬蟲專案名稱
    allowed_domains = ['movie.douban.com']#
    offset = 0
    url = "https://movie.douban.com/top250?start="
    start_urls = {
        url + str(offset),
    }# 根據規律建立訪問的url

 def parse(self, response):
 """
 中間省略部分是上方處理提取item資料的程式碼
 """
     if self.offset < 225:
            self.offset += 25
            yield scrapy.Request(self.url + str(self.offset), callback=self.parse)
 #訪問豆瓣電影top250所有的頁面

三. 儲存並下載資料(pipelines)
將網頁上提取下載的資料以excel檔案形式儲存,並下載電影圖片.(pipelines)

    def __init__(self):
        #   建立excel,填寫表頭
        self.wb = Workbook()
        self.ws = self.wb.active
        #   設定表頭
        self.ws.append(['電影名稱','導演和演員','年份','評分','人數','簡介'])

    def process_item(self, item, spider):
        line=[item['title'],item['dect'],
              item['time'],item['star'],item['jude'], item['quote']]
        self.ws.append(line)
        self.wb.save('電影天堂top250.xlsx')
        #   儲存電影圖片
        byte = urllib.request.urlopen(item['picture'])
        title =item['title']
        if not os.path.exists("圖片"):
            os.makedirs("圖片")
        # 代開一個檔案,準備以二進位制寫入檔案
        fp = open("圖片"+'/'+title+".jpg","wb")
        fp.write(byte.read())
        fp.flush()
        fp.close()
        return item

其設定使用者代理和ip代理都在settings檔案中這裡就不貼程式碼了,相關其餘操作請自行百度.

一切就緒我們就可以開始運行了,我們可以知道該爬蟲下載了250個檔案,用時為38秒(在settings中設定了DOWNLOAD_DELAY = 3)可見下載速度很快.
執行結果如下

讓我們來看看下載的內容:
這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述

Surprise!Wonderful! 裡面有沒有你喜歡的電影呢?

注意:歡迎大家指出意見,相互學習哦~