Python爬取貓眼電影100榜並儲存到excel表格
阿新 • • 發佈:2019-10-22
首先我們前期要匯入的第三方類庫有;
通過貓眼電影100榜的原始碼可以看到很有規律 如:
亦或者是:
根據規律我們可以得到非貪婪的正則表示式
"""<div class="movie-item-info">.*?title="(.*?)".*?class="star">(.*?)</p>.*?releasetime">(.*?)</p>"""
之後我們觀察網頁地址(url)的變化規律:
這是第一頁的網址: https://maoyan.com/board/4?offset=0
這是第二頁的網址: https://maoyan.com/board/4?offset=10
這是第三頁的網址: https://maoyan.com/board/4?offset=20
可以見的網頁變化規律為:(當前頁數-1)*10 即為:(N-1)*10
之後下面進行爬取
1 from urllib import request 2 import random 3 import time 4 import csv 5 import re 6 import xlwt 7 8 class catEyesMovie: 9 10 def __init__(self): 11 self.url = 'https://maoyan.com/board/4?offset={}' 12 self.ua_list = [ 13 'Win7:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.163 Safari/535.1' 14 ] 15 self.line = 1; 16 #'User-Agent': 'Win7:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.163 Safari/535.1' 17 18 19 #獲取網頁內容 20 def get_page(self,url): 21 #使用隨機的user-agent 22 headers = {'User-Agent':random.choice(self.ua_list)} 23 #建立請求物件 24 req = request.Request(url=url,headers=headers) 25 #傳送請求 26 res = request.urlopen(req) 27 #獲取相應物件 28 html = res.read().decode('utf-8','ignore') 29 return html 30 31 #清洗資料 32 def clean_page(self,html,xwlt): 33 pattern = re.compile("""<div class="movie-item-info">.*?title="(.*?)".*?class="star">(.*?)</p>.*?releasetime">(.*?)</p>""", re.S) 34 r_list = pattern.findall(html) 35 self.write_page(r_list,xwlt) 36 37 38 #儲存內容 39 def write_page(self,r_list,xwlt): 40 one_film_dict = {} 41 for rt in r_list: 42 xwlt.write(self.line,0,rt[0].strip()) 43 xwlt.write(self.line,1,rt[1].strip()) 44 xwlt.write(self.line,2,rt[2].strip()) 45 self.line+=1 46 47 48 49 def main(self,xwlt): 50 #憑藉字串 51 res = [] 52 for i in range(1,11): 53 #拼接url地址 https://maoyan.com/board/4?offset={} 54 #獲取當前頁數 55 offset = (i-1)*10 56 url = self.url.format(offset) 57 html = self.get_page(url) 58 self.clean_page(html,xwlt) 59 60 61 62 63 64 if __name__ == '__main__': 65 start = time.time() 66 spider = catEyesMovie() 67 #建立一個xlwt物件 68 book = xlwt.Workbook(encoding='utf-8') 69 #建立sheet,Sheet1為表的名字,cell_overwirite_ok為是否覆蓋單元格 70 sheet1 = book.add_sheet(u'Sheet1',cell_overwrite_ok=True) 71 #進行第一行標題定義 72 sheet1.write(0,0,'電影名稱') 73 sheet1.write(0,1,'主演') 74 sheet1.write(0,2,'上映時間') 75 #進行爬取 76 spider.main(sheet1) 77 book.save('D:\\write.xls') 78 end = time.time() 79 print('執行時間為: %.2f' % (end-start))
每次爬取到的資料結構為:
1 {'電影名稱': '速度與激情5', '主演': '速度與激情5', '上映時間': '速度與激情5'} 2 {'電影名稱': '馴龍高手', '主演': '馴龍高手', '上映時間': '馴龍高手'} 3 {'電影名稱': '勇敢的心', '主演': '勇敢的心', '上映時間': '勇敢的心'} 4 {'電影名稱': '聞香識女人', '主演': '聞香識女人', '上映時間': '聞香識女人'} 5 {'電影名稱': '神偷奶爸', '主演': '神偷奶爸', '上映時間': '神偷奶爸'}
完成後的excel表格如下:
僅供學習!!
&n