目录

一、 爬取

1. 爬取主页面

2. BeautifulSoup查找元素

3. 爬取每部电影信息

二、  数据分析

1.  对上映时间分析

绘制直方图

绘制饼图

绘制折线图

2. 对电影类型分析

绘制词云图

分析某种电影类型随时间变化的折线图

3.  分析演员或者导演

排名前十的演员

对某个演员出演的电影得分分析

三、完整代码

1. 爬取代码

2.  数据分析代码


爬取豆瓣电影内容,并将其写入excel,对数据进行数据分析

方法:requests,BeautifulSoup,pandas

一、 爬取

爬取豆瓣电影内容方法是:先在主页面(每页25部电影,一共10页)上爬取每部电影的网址,然后依次进入每部电影的网址爬取内容。

1. 爬取主页面

在爬取之前,需要找到headers和url。

headers主要是由User-Agent构成,其作用是告诉HTTP服务器, 客户端使用的操作系统和浏览器的名称和版本。在爬取一般的网站只需要一个User-Agent就够了。

url 第一页主页网站https://movie.douban.com/top250?start=0&filter= ,每页的网站就是前一页start=后面加上25。

接下来就是运用requests开始访问网站了。requests一般有两种方法get和post,如下图就是确定使用get或者使用post。在这里就是使用get。

下面就开始访问网站了。输出response如果得到的是200那么就是访问成功了,反之可以根据错误的编号找到错误源 点击查看错误代码大全 。

response = requests.get(url=url, headers=headers)

下一步就是运用BeautifulSoup开始解析网页。

soup = BeautifulSoup(response.text, 'html.parser')

这里的html.parser,是四种解析器中的一种,也是经常使的。得到的soup就是HTML。所以后面我们可以直接使用soup找到我们需要的属性。

做到了这里就完成了爬虫工作的一半。

2. BeautifulSoup查找元素

俗话说磨刀不误砍柴工,在我们进行查找元素时,我们先对BeautifulSoup查找元素方法了解一下。

接下来就介绍以下soup的使用方法,功能强大的CSS选择器能完成我们绝大多数的功能,下面我们就着重介绍一下:

1. find_all

格式为:soup.find_all('标签',attrs={'属性名':'属性值'})    这种格式可以运用绝大多数的情况下,重点记忆!

例如对主页电影名进行爬取,可以看到,标签为span,属性名为class,属性值为title,那么就可以应用find_all了。

    list_name = soup.find_all('span',attrs={'class':'title'})   # 结果为一个列表for i in list_name:print(i.get_text())         # 类型为Tag,需要用get_text()

得到的部分结果为:

可以看到得到的结果是在一个网页中的所有的标签为span,属性名为class,属性值为title。所以这里引出find_all就是查找网页中所有满足条件的内容。

2. find

find_all是找所有满足条件的内容,那么可想而知find也就是查找第一个满足条件的。

    name = soup.find('span',attrs={'class':'title'})print(name.get_text())print(name.string)      # string与get_text()一样

还可以直接find或者find_all 字符串,只会找到满足条件的,例如:

    name = soup.find('span',attrs={'class':'title'},string='肖申克的救赎')print(name.get_text())print(name.string)      # string与get_text()一样

3. select

select一般有两种方法爬取内容,第一,复制selector。第二,查找标签。

select可以直接在找到所要爬取的内容,复制selector,如下所示:

    names = soup.select('#content > div > div.article > ol > li:nth-child(1) > div > div.info > div.hd > a > span:nth-child(1)')for name in names:print(name.get_text())

得到的结果只是每个主页的第一部的第一个名字。所以我们要删除第一个:nth-child(1),才会爬取全部的信息,因为selector是精确定位某个元素的,所以我们要想爬取全部内容就必须删除一部分定位。

删除之后得到的部分结果为:

select的第二种方法和find类似,重点就是class 换成点(因为class是类),id换成#。但是我们完全可以不用直接去找标签,以下方法就是确定标签的,如图:

这里我们看见了电影名的标签为“span.title”,所以查找网页中符合标签的全部内容,如下:

    names = soup.select('span.title')for name in names:print(name.get_text())

总结:BeautifulSoup查找元素主要运用find_all和select这两种方法,查找元素注意找到爬取内容的标签和这两种方法的优缺点

下面我们就正式开始爬取元素信息:

首先,在每页的主页面将每部电影的网址爬取下来,我们可以直接去每部电影中分析。

找到含有电影网址的标签href,这里使用的方法就是复制selector爬取

分析:如果用find_all会得到很多的并且不是需要的href,十分的麻烦,所以我们可以精确定位。

    url_mv_list = soup.select('#content > div > div.article > ol > li > div > div.info > div.hd > a')print(url_mv_list)

输出url_mv_list 得到的是一个列表,列表里面的元素都是一部电影的所有信息,如下图,

所以我们只需要对每一个元素的href读取就行了

    for index_url in range(len(url_mv_list)):url_mv = url_mv_list[index_url]['href']list_url_mv.append(url_mv)print(url_mv)

得到的结果就是每部电影网址

3. 爬取每部电影信息

然后就是进入根据得到的每部电影网址,解析网页,然后爬取元素。方法和爬取主页面方法一样,这里就直接贴代码了。

在此之前,需要考虑爬取内容输出格式,因为我们最后要将爬取得到的结果输入到Excel中,运用到的方法是先将数据换成dataframe,然后写入Excel。举个例子就能很好说明怎样转换成dataframe。

a = [['a', '1', '2'], ['b', '3', '4'], ['c', '5', '6']]
df = pd.DataFrame(a, columns=['pan', 'panda', 'fan'])
print(df)

根据上面的例子得到的结果,我们需要将每一部电影的信息做成一个列表,作为函数的返回值,然后再将返回值添加到一个列表中,这样就可以转换成dataframe了。

# 对每部电影进行处理
def loading_mv(url,number):list_mv = []        # 将爬取每部电影信息加入到其中print('-----正在处理第{}部电影-----'.format(number+1))list_mv.append(number+1)        # 排名# 解析网页response_mv = requests.get(url=url,headers=headers)soup_mv = BeautifulSoup(response_mv.text,'html.parser')# 爬取电影名mv_name = soup_mv.find_all('span',attrs={'property':'v:itemreviewed'})      # 电影名mv_name = mv_name[0].get_text()list_mv.append(mv_name)# print(mv_name)# 爬取电影的上映时间mv_year = soup_mv.select('span.year')       # 电影上映时间mv_year = mv_year[0].get_text()[1:5]list_mv.append(mv_year)# print(mv_year)# 爬取导演信息list_mv_director = []       # 导演mv_director = soup_mv.find_all('a',attrs={'rel':"v:directedBy"})for director in mv_director:list_mv_director.append(director.get_text())string_director = '/'.join(list_mv_director)        # 重新定义格式list_mv.append(string_director)# print(list_mv_director)# 爬取主演信息list_mv_star = []           # 主演mv_star = soup_mv.find_all('span',attrs={'class':'actor'})if mv_star == []:           # 在第210部时没有主演list_mv.append(None)else :mv_star = mv_star[0].get_text().strip().split('/')mv_first_star = mv_star[0].split(':')list_mv_star.append(mv_first_star[-1].strip())    del mv_star[0]           # 去除'主演'字段for star in  mv_star:list_mv_star.append(star.strip())string = '/'.join(list_mv_star)          # 重新定义格式list_mv.append(string)# 爬取电影类型list_mv_type = []       # 电影类型mv_type = soup_mv.find_all('span',attrs={'property':'v:genre'})for type in mv_type:list_mv_type.append(type.get_text())string_type = '/'.join(list_mv_type)list_mv.append(string_type)# print(list_mv_type)# 爬取电影评分mv_score = soup_mv.select('strong.ll.rating_num')       # 评分mv_score = mv_score[0].get_text()list_mv.append(mv_score)# 爬取评价人数mv_evaluation_num = soup_mv.select('a.rating_people')       # 评价人数mv_evaluation_num = mv_evaluation_num[0].get_text().strip()list_mv.append(mv_evaluation_num)# 爬取剧情简介mv_plot = soup_mv.find_all('span',attrs={"class":"all hidden"})     # 剧情简介if mv_plot == []:list_mv.append(None)else:string_plot = mv_plot[0].get_text().strip().split()new_string_plot = ' '.join(string_plot)list_mv.append(new_string_plot)# 加入电影网址list_mv.append(url)return list_mv

定义了个爬取每部电影内容,下面就开始调用函数:

先创建了一个list_all_mv的列表,用来存储调用函数的返回值,即存储每部电影的信息,如下图,

list_all_mv = []dict_mv_info = {}
for number in range(len(list_url_mv)):mv_info = loading_mv(list_url_mv[number],number)list_all_mv.append(mv_info)
print('-----运行结束-----')pd = DataFrame(list_all_mv,columns=['电影排名','电影名','上映时间','导演','主演','电影类型','电影评分','评价人数','电影简介','电影链接'])
# print(pd)pd.to_excel(r'C:\Users\86178\Desktop\豆瓣电影Top250.xlsx')

最后得到了豆瓣电影Top250excel表,如下图:

附:当你用同一个IP 访问次数过多时,网站可能会将你的IP封了,类似于:

HTTPSConnectionPool(host='movie.douban.com', port=443): Max retries exceeded with url: /subject/1292052/ (Caused by NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x000002B3FBAB05C0>: Failed to establish a new connection: [Errno 11001] getaddrinfo failed'))

解决办法:

1. 换一个WiFi,就能够解决,因为不同的WiFi会有不同的外部IP,所以当我们的IP被封了,换一个WiFi或者热点就好了。

2. 代建代理IP池。代理IP池原理就是找到一些可用的IP加入在requests中,也就是指定一个IP去访问网站

IP格式为 :   'http':'http://IP:端口'  , 如:  'http':'http://119.14.253.128:8088'

response = requests.get(url=url,headers=headers,proxies=ip,timeout=3)      # 在0.1秒之内请求百度的服务器

获取IP有很多种途径

免费代理IP http://ip.yqie.com/ipproxy.htm
66免费代理网 http://www.66ip.cn/
89免费代理 http://www.89ip.cn/
无忧代理 http://www.data5u.com/
云代理 http://www.ip3366.net/
快代理 https://www.kuaidaili.com/free/
极速专享代理 http://www.superfastip.com/
HTTP代理IP https://www.xicidaili.com/wt/
小舒代理 http://www.xsdaili.com
西拉免费代理IP http://www.xiladaili.com/
小幻HTTP代理 https://ip.ihuan.me/
全网代理IP http://www.goubanjia.com/
飞龙代理IP http://www.feilongip.com/

搭建代理IP池就是爬取这些网站上面的IP和端口,然后将爬取得到的内容做成标准格式。后续我会出一搭建代理IP池的博客。

二、  数据分析

有句话说得好,数据就是金钱,我们得到了数据,还需要进一步的分析,才能发挥更大的作用。读取excel和写入的方法一样,得到的结果就是dataframe。

def excel_to_dataframe(excel_path):df = pd.read_excel(excel_path,keep_default_na=False)        # keep_default_na=False 得到的结果是'',而不是nanreturn df
excel_path = r'C:\Users\86178\Desktop\豆瓣电影Top250.xlsx'
data_mv = excel_to_dataframe(excel_path)

下面就对爬取的内容进行处理,如上映时间,电影类型,主演或者导演。

1.  对上映时间分析

绘制直方图

绘制饼图

绘制折线图

1.  综合以上三个图得到主要上榜的电影集中在1993-2016左右。

2. 可以得出在1994、2004、2010这三年上映的电影上榜次数达12部及以上。

3. 不能得出随时间的增长,上榜的电影就越多。

2. 对电影类型分析

绘制词云图

将所有电影类型统计记数,绘制词云图,如下图

分析某种电影类型随时间变化的折线图

对“剧情”分析

对”科幻“分析

综合以上得出结论:

1.  电影类型为”剧情“一直都是人们所爱好的,特别是在1994年的电影达到了巅峰12部,结合上一步对时间的分析可以得出1994上映的全部电影都是”剧情“类型的,并且直到现在为止,仍然堪称经典。

2.  ”科幻”类型的电影,在早期科技不发达时,拍摄不到那么好的效果。但是随时间的发展,科技的进步,“科技”类型的电影得到了发展。

3.  分析演员或者导演

判断演员或者导演的排名主要是根据电影评分为依据,因为在Top250榜上,都是人们所认可的,所以我们粗略的根据总的评分高低判断演员排名。

1. 排名前十的演员

2. 对某个演员出演的电影得分分析

综合以上的结果可以得出结论:

1. 前十的演员为:张国荣,梁朝伟........

2. 分析某个演员出演的电影得分

三、完整代码

1. 爬取代码

import requests
from bs4 import BeautifulSoup
from pandas import DataFrame'''最后成功提取了'电影排名','电影名','上映时间','导演','主演','电影类型','电影评分','评价人数','电影链接'最后将结果输出到了 豆瓣电影Top250.xlsx 但是还存在问题:就是提取语言和制片国家/地区时,出现没有selector的情况。要解决该问题可能需要xpath
'''headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36 Edg/92.0.902.55'}start_num = [i for i in range(0,226,25)]list_url_mv = []        # 所有电影的URLfor start in start_num:url = 'https://movie.douban.com/top250?start={}&filter='.format(start)print('正在处理url:',url)response = requests.get(url=url, headers=headers)soup = BeautifulSoup(response.text, 'html.parser')url_mv_list = soup.select('#content > div > div.article > ol > li > div > div.info > div.hd > a')# print(url_mv_list)for index_url in range(len(url_mv_list)):url_mv = url_mv_list[index_url]['href']list_url_mv.append(url_mv)# print(url_mv)# 对每部电影进行处理
def loading_mv(url,number):list_mv = []print('-----正在处理第{}部电影-----'.format(number+1))list_mv.append(number+1)        # 排名# 解析网页response_mv = requests.get(url=url,headers=headers)soup_mv = BeautifulSoup(response_mv.text,'html.parser')# 爬取电影名mv_name = soup_mv.find_all('span',attrs={'property':'v:itemreviewed'})      # 电影名mv_name = mv_name[0].get_text()list_mv.append(mv_name)# print(mv_name)# 爬取电影的上映时间mv_year = soup_mv.select('span.year')       # 电影上映时间mv_year = mv_year[0].get_text()[1:5]list_mv.append(mv_year)# print(mv_year)# 爬取导演信息list_mv_director = []       # 导演mv_director = soup_mv.find_all('a',attrs={'rel':"v:directedBy"})for director in mv_director:list_mv_director.append(director.get_text())string_director = '/'.join(list_mv_director)        # 重新定义格式list_mv.append(string_director)# print(list_mv_director)# 爬取主演信息list_mv_star = []           # 主演mv_star = soup_mv.find_all('span',attrs={'class':'actor'})if mv_star == []:           # 在第210部时没有主演list_mv.append(None)else :mv_star = mv_star[0].get_text().strip().split('/')mv_first_star = mv_star[0].split(':')list_mv_star.append(mv_first_star[-1].strip())del mv_star[0]           # 去除'主演'字段for star in  mv_star:list_mv_star.append(star.strip())string = '/'.join(list_mv_star)          # 重新定义格式list_mv.append(string)# 爬取电影类型list_mv_type = []       # 电影类型mv_type = soup_mv.find_all('span',attrs={'property':'v:genre'})for type in mv_type:list_mv_type.append(type.get_text())string_type = '/'.join(list_mv_type)list_mv.append(string_type)# print(list_mv_type)# 爬取电影评分mv_score = soup_mv.select('strong.ll.rating_num')       # 评分mv_score = mv_score[0].get_text()list_mv.append(mv_score)# 爬取评价人数mv_evaluation_num = soup_mv.select('a.rating_people')       # 评价人数mv_evaluation_num = mv_evaluation_num[0].get_text().strip()list_mv.append(mv_evaluation_num)# 爬取剧情简介mv_plot = soup_mv.find_all('span',attrs={"class":"all hidden"})     # 剧情简介if mv_plot == []:list_mv.append(None)else:string_plot = mv_plot[0].get_text().strip().split()new_string_plot = ' '.join(string_plot)list_mv.append(new_string_plot)# 加入电影网址list_mv.append(url)return list_mv# url1 = 'https://movie.douban.com/subject/1292052/'
# url2 = 'https://movie.douban.com/subject/26430107/'      # 210部
# a = loading_mv(url1,1)
# # b = loading_mv(url2,210)
# # list_all_mv.append(a)
# # list_all_mv.append(b)list_all_mv = []dict_mv_info = {}
for number in range(len(list_url_mv)):mv_info = loading_mv(list_url_mv[number],number)list_all_mv.append(mv_info)
print('-----运行结束-----')pd = DataFrame(list_all_mv,columns=['电影排名','电影名','上映时间','导演','主演','电影类型','电影评分','评价人数','电影简介','电影链接'])
# print(pd)pd.to_excel(r'C:\Users\86178\Desktop\豆瓣电影Top250.xlsx')

2.  数据分析代码

'''
对爬取得到的豆瓣电影Top250进行数据分析
分析内容:
1. 对时间:对时间分析绘制直方图饼图折线图——电影
2.对类型: 电影类型随时间变化绘制电影类型随时间变化电影类型词云图
3.对主演或导演: 以电影评分分析演员或者导演前十名主演查询演员/导演出演信息所有演员导演出演信息
'''import pandas as pd
import matplotlib.pyplot as plt
import matplotlib as mpl
import wordcloud
import imageio# csv_path = '豆瓣电影Top250.csv'     # 不能用csv进行处理,可能会出现错误# 读取excel转换成dataframe,方便读取
def excel_to_dataframe(excel_path):df = pd.read_excel(excel_path,keep_default_na=False)        # keep_default_na=False 得到的结果是'',而不是nanreturn df
excel_path = r'C:\Users\86178\Desktop\豆瓣电影Top250.xlsx'
data_mv = excel_to_dataframe(excel_path)dict_time = {}
for time in data_mv['上映时间']:dict_time[time] = dict_time.get(time,0)+1list_time = list(dict_time.items())
list_time.sort(key=lambda x:x[1],reverse=True)
list_year = []  # 年份
list_times = []     # 出现次数
for t in list_time:list_year.append(t[0])list_times.append(t[1])# 绘制直方图
def make_Histogram(list_x,list_y,color):# 解决中文显示问题plt.rcParams['font.sans-serif'] = ['SimHei']plt.rcParams['axes.unicode_minus'] = Falseplt.bar(list_x,list_y,width=1,color=color)plt.title('电影上映时间与所产电影部数直方图')plt.xlabel('电影上映时间')plt.ylabel('年产电影部数')plt.show()# make_Histogram(list_year,list_times,color=['g','y','m'])     # 绘制电影年份出现次数直方图# 绘制饼图
def make_Pie(list_times,list_year):mpl.rcParams['font.sans-serif'] = ['KaiTi', 'SimHei', 'FangSong']  # 汉字字体,优先使用楷体,如果找不到楷体,则使用黑体mpl.rcParams['font.size'] = 12  # 字体大小mpl.rcParams['axes.unicode_minus'] = False  # 正常显示负号plt.figure(figsize=(10,10),dpi=100)     # 视图的大小plt.pie(list_times,                     # 指定绘图数据labels=list_year,               # 添加饼图圈外的标签autopct='%1.2f%%',              # 设置百分比格式textprops={'fontsize':10},      # 设置饼图中的属性字体大小、颜色labeldistance=1.05)             # 设置各扇形标签(图例)与圆心的距离# plt.legend(fontsize=7)                 # 设置饼图指示plt.title('年产电影部数占比')plt.show()pie_other = len([i for i in list_time if i[1]==1])      # 将年份电影为1的归为其它类
list_pie_year = []
list_pie_times = []for i in list_time:if i[1] == 1:breakelse :list_pie_year.append(i[0])list_pie_times.append(i[1])
list_pie_year.append('其它电影为1的年份')
list_pie_times.append(pie_other)
#
# make_Pie(list_pie_times,list_pie_year)
# make_Pie(list_times,list_year)# 绘制折现图
def make_Plot(list_year,list_times):# 解决中文显示问题plt.rcParams['font.sans-serif'] = ['SimHei']plt.rcParams['axes.unicode_minus'] = Falseplt.title('年产电影个数折现图')plt.xlabel('电影上映时间')plt.ylabel('年产电影部数')plt.plot(list_year, list_times)plt.show()list_plot_year = []
list_plot_times = []
list_time.sort(key=lambda x:int(x[0]))
for t in list_time:list_plot_year.append(t[0])list_plot_times.append(t[1])
# make_Plot(list_plot_year,list_plot_times)mv_type = data_mv['电影类型']
dict_type = {}
for type in mv_type:line = type.split('/')for t in line:dict_type[t] = dict_type.get(t,0) + 1
list_type = list(dict_type.items())
list_type.sort(key=lambda x:x[1],reverse=True)# 绘制词云图
def c_wordcloud(ls):# string1 = ' '.join(ls)gpc=[]for i in ls:gpc.append(i[0])string1=" ".join('%s' % i for i in gpc)color_mask=imageio.imread(r"logo.jpg")wc = wordcloud.WordCloud(random_state=30,width=600,height=600,max_words=30,background_color='white',font_path=r'msyh.ttc',mask=color_mask)wc.generate(string1)plt.imshow(wc)plt.show()# wc.to_file(path)
# c_wordcloud(list_type)# [年份,电影类型]
list_time_type = []
for i in range(250):line = data_mv['电影类型'][i].split('/')for j in line:time_type = []time_type.append(data_mv['上映时间'][i])time_type.append(j)list_time_type.append(time_type)dict_time_type = {}
for i in list_time_type:dict_time_type[tuple(i)] = dict_time_type.get(tuple(i),0) + 1
list_num_time_type = list(dict_time_type.items())
list_num_time_type.sort(key=lambda x:x[1],reverse=True)# 制作一种电影类型的发展史(以电影类型为单位)
def mv_time_type(type_name):list_mv_type = []for num in list_num_time_type:if num[0][1] == type_name:list_mv_type.append(num)list_mv_type.sort(key=lambda x:x[0][0],reverse=False)list_year = []list_times = []for t in list_mv_type:list_year.append(t[0][0])list_times.append(t[1])# 解决中文显示问题plt.rcParams['font.sans-serif'] = ['SimHei']plt.rcParams['axes.unicode_minus'] = Falseplt.title('电影类型"{}"的发展史'.format(type_name))plt.xlabel('年份')plt.ylabel('每年出现的次数')plt.plot(list_year,list_times)plt.show()# mv_time_type('剧情')
# mv_time_type('科幻')      # 主要集中在2000以后# 计算导演和主演的每部作品的得分和总得分
def people_score(peo_dir_star):list = []for num in range(250):if data_mv[peo_dir_star][num] == '':continueelse:peoples = data_mv[peo_dir_star][num].split('/')for people in peoples:list_p_s = []list_p_s.append(people)list_p_s.append(data_mv['电影评分'][num])list_p_s.append(data_mv['电影排名'][num])list_p_s.append(data_mv['电影名'][num])list.append(list_p_s)return listlist_director = people_score('导演')
list_star = people_score('主演')# 最佳导演或者演员----根据总分求得
def best_people(list_people):dict_people = {}for i in list_people:dict_people[i[0]] = dict_people.get(i[0],[]) + [(i[1],i[2],i[3])]for i in dict_people.items():i[1].append(float('{:.2f}'.format(sum([j[0] for j in i[1]]))))# ('巩俐', [(9.6, 2, '霸王别姬'), (9.3, 30, '活着'), (8.7, 109, '唐伯虎点秋香 唐伯虎點秋香'), '27.60'])list_new_people = list(dict_people.items())list_new_people.sort(key=lambda x:x[1][-1],reverse=True)print('搜索结束,请开始您的操作(输入数字)!\n---输入1排名前十的主演---\n---输入2搜索演员的出演情况---\n---输入3输出所有演员---')print('-----输入enter退出-----')select_number = input('开始输入操作:')while select_number != '':if select_number == '1':print('前十演员出演信息:')list_all_score = []     # 总分list_prople_name = []for i in list_new_people[0:10]:print(i)list_prople_name.append(i[0])list_all_score.append(i[1][-1])# 解决中文显示问题plt.rcParams['font.sans-serif'] = ['SimHei']plt.rcParams['axes.unicode_minus'] = False# plt.figure(figsize=(10, 10), dpi=100)  # 视图的大小plt.title('前十演员总评分')plt.xlabel('演员')plt.ylabel('总评分')plt.bar(list_prople_name,list_all_score,width=0.5)plt.show()elif select_number == '2':# star_name = input('输入您想要知道的演员名:')star_name = ' 'while star_name != '':star_name = input('输入您想要知道的演员名:')list_mv_name = []       # 电影名list_mv_score = []      # 电影评分for number,i in enumerate(list_new_people):if star_name == i[0]:all_score = i[1][-1]      # 总分del i[1][-1]for j in i[1]:list_mv_name.append(j[2])list_mv_score.append(j[0])print('{} 主演豆瓣电影Top250中排名{}的《{}》评分为 {}'.format(star_name,j[1],j[2],j[0]))print("{}共主演了{}部电影,所有总分为{},在所有演员中排名第{}".format(star_name,len(i[1]),all_score,number+1))print('查询结束!')# 计算饼图def pie_mv_score():mpl.rcParams['font.sans-serif'] = ['KaiTi', 'SimHei','FangSong']  # 汉字字体,优先使用楷体,如果找不到楷体,则使用黑体mpl.rcParams['font.size'] = 12  # 字体大小mpl.rcParams['axes.unicode_minus'] = False  # 正常显示负号plt.figure(figsize=(10,10))plt.pie(list_mv_score,labels=list_mv_name,autopct='%1.2f%%',      # 计算百分比,设置及格式textprops={'fontsize': 10})plt.title('{}的主演电影总分比---总排名为{}'.format(star_name,number+1))plt.show()pie_mv_score()breakelse:print('查无此人!')breakelif select_number == '3':for i in list_new_people:print(i)else :print('无此项操作!')select_number = input('查询结束,您还可以继续输入查询序号:')print('-----查询结束-----')best_people(list_star)

爬取豆瓣电影Top250和数据分析相关推荐

  1. python爬取豆瓣电影top250_用Python爬虫实现爬取豆瓣电影Top250

    用Python爬虫实现爬取豆瓣电影Top250 #爬取 豆瓣电影Top250 #250个电影 ,分为10个页显示,1页有25个电影 import urllib.request from bs4 imp ...

  2. 案例:爬取豆瓣电影Top250中的电影信息

    案例:爬取豆瓣电影Top250中的电影信息 豆瓣电影Top250首页 分析请求地址 在豆瓣电影Top250首页的底部可以确定电影信息一共有10页内容,每页25个电影信息,如下图: 切换页面,可以看到浏 ...

  3. 利用python爬取豆瓣电影top250

    利用python爬取豆瓣电影top250: 注:本内容只是作为个人学习记录 1.业务分析 进入网页https://movie.douban.com/top250 可以看见每部电影都呈现在眼前,点击电影 ...

  4. Python爬虫 爬取豆瓣电影TOP250

    Python爬虫 爬取豆瓣电影TOP250 最近在b站上学习了一下python的爬虫,实践爬取豆瓣的电影top250,现在对这两天的学习进行一下总结 主要分为三步: 爬取豆瓣top250的网页,并通过 ...

  5. python爬取豆瓣电影top250_【Python3爬虫教程】Scrapy爬取豆瓣电影TOP250

    今天要实现的就是使用是scrapy爬取豆瓣电影TOP250榜单上的电影信息. 步骤如下: 一.爬取单页信息 首先是建立一个scrapy项目,在文件夹中按住shift然后点击鼠标右键,选择在此处打开命令 ...

  6. 爬取豆瓣电影Top250影片信息

    爬取豆瓣电影Top250影片信息 查看影片的详细信息 爬取过程 需安装的包 确定爬取地址 发送请求头 解析数据 保存数据 完整代码 查看影片的详细信息 进入豆瓣电影Top250,选择某一影片,右击,选 ...

  7. Python爬取豆瓣电影top250的电影信息

    Python爬取豆瓣电影top250的电影信息 前言 一.简介 二.实例源码展示 小结 前言 相信很多小伙伴在学习网络爬虫时,老师们会举一些实例案例讲解爬虫知识,本文介绍的就是经典爬虫实际案例–爬取豆 ...

  8. 03_使用scrapy框架爬取豆瓣电影TOP250

    前言: 本次项目是使用scrapy框架,爬取豆瓣电影TOP250的相关信息.其中涉及到代理IP,随机UA代理,最后将得到的数据保存到mongoDB中.本次爬取的内容实则不难.主要是熟悉scrapy相关 ...

  9. jsoup爬取豆瓣电影top250

    文章目录 0.准备工作 1. 分析 2. 构思 3. 编程 3.1 定义一个bean,用于保存电影的数据 3.2 按照之前的构思进行编程 4.效果图 5.获取资源 5.1GitHub 5.2百度云 0 ...

  10. 爬虫入门经典(四) | 如何爬取豆瓣电影Top250

      大家好,我是不温卜火,是一名计算机学院大数据专业大三的学生,昵称来源于成语-不温不火,本意是希望自己性情温和.作为一名互联网行业的小白,博主写博客一方面是为了记录自己的学习过程,另一方面是总结自己 ...

最新文章

  1. 网络营销激烈竞争下,网站被黑了怎么办?
  2. Android之BroadcastReceiver的使用
  3. html 布局满屏,CSS全屏布局的5种方式
  4. P7405-[JOI 2021 Final]雪玉【二分】
  5. (一)FlexViewer之整体框架解析
  6. LPTSTR、LPCSTR、LPCTSTR、LPSTR的区别
  7. SaaS市场增长迅速 企业借CRM消灭管理黑洞
  8. curry化 js_前端发动机从 bind 聊到 curry (柯里化)
  9. 【webpack】webpack 常用插件集合
  10. 过程装备安装调试实训装置
  11. WPS Office 2021 for Mac(办公软件)
  12. Netty(四十一) - 心跳(heartbeat)源码剖析
  13. Mysql安装之后没有my.ini的解决办法
  14. linux查询系统版本信息命令,命令查询windowsLinux系统版本信息
  15. pytorch 目标检测数据增强 详细讲解
  16. 塞尔达传说-荒野之息 体验复盘
  17. python2.7下安装PIL库
  18. Shopee招聘主页下面一排建筑简笔画代表哪里
  19. 杂谈:一张图片引发的版权问题
  20. 海思AI芯片(Hi3519A/3559A)方案学习(三)Ubuntu18.0.4上编译Hi3519AV100 uboot和kernel

热门文章

  1. 2020-12-31
  2. 分形--朱利亚集合图形2
  3. https://github.com/qiangqiang666/demo
  4. U盘故障恢复--“文件或目录损坏且无法读取”
  5. 减小App大小:图片篇
  6. ALFA | 临床基因组课程 人群频率数据库 新成员
  7. win7显示文件扩展名
  8. iOS可持续化集成: Jenkins + bundler + cocoapods + shenzhen + fastlane + pgyer
  9. APM监控--(六)Dapper,大规模分布式系统的跟踪系统
  10. 【中医学】8 中药-2