1.导入包
复制代码
1
2
3import requests from bs4 import BeautifulSoup import pandas as pd
2. 构造分页数字列表
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19page_indexs = list(range(0, 250, 25)) #执行:[0, 25, 50, 75, 100, 125, 150, 175, 200, 225] page_indexs def download_all_htmls(): """ 下载所有列表页面的HTML,用于后续的分析 """ htmls = [] i = 1 for idx in page_indexs: url = f"https://movie.douban.com/top250?start={idx}&filter=" print("第 {} 页:html: {}".format(i,url)) i += 1 r = requests.get(url, headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)"}) if r.status_code != 200: #请求返回的状态码不为200 raise Exception("error") htmls.append(r.text) return htmls
3.执行爬取
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66htmls = download_all_htmls() #执行: 第 1 页:html: https://movie.douban.com/top250?start=0&filter= 第 2 页:html: https://movie.douban.com/top250?start=25&filter= 第 3 页:html: https://movie.douban.com/top250?start=50&filter= 第 4 页:html: https://movie.douban.com/top250?start=75&filter= 第 5 页:html: https://movie.douban.com/top250?start=100&filter= 第 6 页:html: https://movie.douban.com/top250?start=125&filter= 第 7 页:html: https://movie.douban.com/top250?start=150&filter= 第 8 页:html: https://movie.douban.com/top250?start=175&filter= 第 9 页:html: https://movie.douban.com/top250?start=200&filter= 第 10 页:html: https://movie.douban.com/top250?start=225&filter= import lxml from lxml import etree tree = etree.HTML(htmls[0]) #实例化 树 def get_onePage_items(tree): #得到25个<li>标签 里面是各个内容 items = [] li_list = tree.xpath("//ol[@class='grid_view']/li") #长度25的集合 for li in li_list: #排名 ranking = li.xpath('./div/div/em/text()')[0] #封面图片 pic = li.xpath('./div/div/a/@href')[0] #标题 title_list = li.xpath('./div/div[2]/div/a/span/text()') title = "" for i in title_list: s = "".join(i.split()) title = title + s #导演 director = li.xpath('normalize-space(./div/div[2]/div[2]/p/text())') #星星 star = li.xpath('./div/div[2]/div[2]/div/span[1]/@class')[0][6:-2] if star == '45': star = '4.5' #评分 grade = li.xpath('./div/div[2]/div[2]/div/span/text()')[0] #参与评分人数 num_valuator = li.xpath('./div/div[2]/div[2]/div/span/text()')[1] #电影格言 quote = li.xpath('./div/div[2]/div[2]/p[2]/span/text()') items.append({ 'ranking':ranking, 'pic':pic, 'title':title, 'director':director, 'star':star, 'grade':grade, 'num_valuator':num_valuator, 'quote':quote }) print(str(quote)) a = input() return items items = get_onePage_items(tree) print(items) all_items = [] for html in htmls: tree = etree.HTML(html) #实例化 树 items = get_onePage_items(tree) all_items.extend(items) print(len(all_items)) #执行:250
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204#print(all_items) #3、将结果存入excel df = pd.DataFrame(all_items) print(df) # ranking pic 0 1 https://movie.douban.com/subject/1292052/ 1 2 https://movie.douban.com/subject/1291546/ 2 3 https://movie.douban.com/subject/1292720/ 3 4 https://movie.douban.com/subject/1295644/ 4 5 https://movie.douban.com/subject/1292722/ .. ... ... 245 246 https://movie.douban.com/subject/2297265/ 246 247 https://movie.douban.com/subject/1292528/ 247 248 https://movie.douban.com/subject/26393561/ 248 249 https://movie.douban.com/subject/25864085/ 249 250 https://movie.douban.com/subject/27119724/ title 0 肖申克的救赎/TheShawshankRedemption/月黑高飞(港)/刺激1995(台) 1 霸王别姬/再见,我的妾/FarewellMyConcubine 2 阿甘正传/ForrestGump/福雷斯特·冈普 3 这个杀手不太冷/Léon/杀手莱昂/终极追杀令(台) 4 泰坦尼克号/Titanic/铁达尼号(港/台) .. ... 245 浪潮/DieWelle/恶魔教室(台)/白恤暴潮(港) 246 猜火车/Trainspotting/迷幻列车(港)/定位的火车 247 小萝莉的猴神大叔/BajrangiBhaijaan/娃娃返乡任务(台)/宝莱坞之钢铁奶爸(台) 248 火星救援/TheMartian/火星任务(港)/绝地救援(台) 249 小丑/Joker/小丑起源电影:罗密欧/Romeo director star grade 0 导演: 弗兰克·德拉邦特 Frank Darabont 主演: 蒂姆·罗宾斯 Tim R... 5 9.7 1 导演: 陈凯歌 Kaige Chen 主演: 张国荣 Leslie Cheung / 张... 5 9.6 2 导演: 罗伯特·泽米吉斯 Robert Zemeckis 主演: 汤姆·汉克斯 Tom ... 5 9.5 3 导演: 吕克·贝松 Luc Besson 主演: 让·雷诺 Jean Reno / 娜塔... 4.5 9.4 4 导演: 詹姆斯·卡梅隆 James Cameron 主演: 莱昂纳多·迪卡普里奥 Leo... 4.5 9.4 .. ... ... ... 245 导演: 丹尼斯·甘塞尔 Dennis Gansel 主演: 尤尔根·沃格尔 Jürgen... 4.5 8.7 246 导演: 丹尼·博伊尔 Danny Boyle 主演: 伊万·麦克格雷格 Ewan McG... 4.5 8.5 247 导演: 卡比尔·汗 Kabir Khan 主演: 萨尔曼·汗 Salman Khan /... 4 8.4 248 导演: 雷德利·斯科特 Ridley Scott 主演: 马特·达蒙 Matt Damo... 4.5 8.5 249 导演: 托德·菲利普斯 Todd Phillips 主演: 杰昆·菲尼克斯 Joaqui... 4.5 8.7 num_valuator quote 0 2452980人评价 [希望让人自由。] 1 1823689人评价 [风华绝代。] 2 1843998人评价 [一部美国近现代史。] 3 2008785人评价 [怪蜀黍和小萝莉不得不说的故事。] 4 1805954人评价 [失去的才是永恒的。 ] .. ... ... 245 234900人评价 [世界离独裁只有五天。] 246 371129人评价 [不可猜的青春迷笛。 ] 247 425344人评价 [宝莱坞的萝莉与大叔。] 248 593670人评价 [] 249 843097人评价 [] [250 rows x 8 columns] df.to_excel(r"C:Users二狗Desktop豆瓣电影TOP250.xlsx","w") li_list = tree.xpath("//ol[@class='grid_view']/li") ranking = li_list[0].xpath('./div/div/em/text()')[0] print(ranking) #['1'] pic = li_list[0].xpath('./div/div/a/@href')[0] print(pic) #['https://movie.douban.com/subject/1292052/'] title_list = li_list[1].xpath('./div/div[2]/div/a/span/text()') title = "" for i in title_list: s = "".join(i.split()) title = title + s print(title) #霸王别姬/再见,我的妾/FarewellMyConcubine director = li_list[1].xpath('normalize-space(./div/div[2]/div[2]/p/text())') print(director) #['n 导演: 弗兰克·德拉邦特 Frank Darabontxa0xa0xa0主演: 蒂姆·罗宾斯 Tim Robbins /...', 'n 1994xa0/xa0美国xa0/xa0犯罪 剧情n star = li_list[0].xpath('./div/div[2]/div[2]/div/span[1]/@class')[0] print(star[6:-2]) #['rating5-t'] grade = li_list[0].xpath('./div/div[2]/div[2]/div/span/text()')[0] num_valuator = li_list[0].xpath('./div/div[2]/div[2]/div/span/text()')[1] print(grade) print(num_valuator) #['9.7', '2452980人评价'] quote = li_list[0].xpath('./div/div[2]/div[2]/p[2]/span/text()')[0] print(quote) #执行: 1 https://movie.douban.com/subject/1292052/ 霸王别姬/再见,我的妾/FarewellMyConcubine 导演: 陈凯歌 Kaige Chen 主演: 张国荣 Leslie Cheung / 张丰毅 Fengyi Zha... 5 9.7 2452980人评价 希望让人自由。 title = li_list[1].xpath('./div/div[2]/div/a/span/text()') a = "" for i in title: s = "".join(i.split()) a = a + s print(a) #执行: 霸王别姬/再见,我的妾/FarewellMyConcubine
最后
以上就是欢呼摩托最近收集整理的关于爬取豆瓣前250电影数据的全部内容,更多相关爬取豆瓣前250电影数据内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复