1. 程式人生 > >Python爬取貓眼電影100榜並儲存到excel表格

Python爬取貓眼電影100榜並儲存到excel表格

首先我們前期要匯入的第三方類庫有;

 

 

 通過貓眼電影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