Scrapy豆瓣電影top250(excel儲存和圖片下載)
阿新 • • 發佈:2019-01-06
豆瓣電影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! 裡面有沒有你喜歡的電影呢?
注意:歡迎大家指出意見,相互學習哦~