当前位置: 首页 > 后端技术 > Python

口碑爆棚!Python爬虫揭示-为什么《完美关系》没有按预期执行?

时间:2023-03-26 13:17:43 Python

CDA数据分析师近期接连出品多部职场剧,包括《安家》由孙俪主演的房地产行业、《我在北京等你》由李易峰饰演的律师、《》由佟丽娅、黄某主演的《公关行业》轩。其中,《安家》是翻拍高分日剧《卖房子的女人》,《我在北京等你》讲述的是律师的奋斗故事,《完美关系》是国产职场剧涉足的又一新兴行业——公关。那么这三部剧的口碑如何呢?到目前为止,《安家》在豆瓣上的评分是6.2,《我在北京等你》豆瓣评分是5.2,《完美关系》是3.9。都不是特别好的成绩。《完美关系》播出后,有公关界的朋友吐槽:我们不想这样被代言!那么《完美关系》不满意的地方在哪里呢?今天我们先来说说这个《完美关系》。01近年频频扑街的国产职场剧近年来,国产职场剧层出不穷,几乎涵盖了各个行业,从房地产、互联网、医疗,到翻译、律师等等。但是这些剧的口碑呢?再来看看比较火爆的几部:以上几部剧播出时热搜频频,口碑却差强人意。分数从3.5到5.5不等,连6分的及格线都没有。相关行业的从业者也抱怨,根本没有反映行业的真实现状。说是职场剧,其实不是披着行业外衣的偶像剧!进一步总结国产职场剧的情况可以发现:从2008年到2020年3月,一共制作了64部职场剧。是2014年的13倍!量上去了,接着质量堪忧。从这些职场剧的豆瓣评分可以看出,平均评分一直徘徊在5.5分左右。02《完美关系》身披公关外衣,这一次的《完美关系》瞄准公关行业,能否名副其实的国产职场剧?《完美关系》是由安建执导,黄轩、佟丽娅领衔主演,陈数、高露领衔主演的都市职场剧。故事讲述了公关搭档卫哲、江大林等人从单打独斗到并肩作战,积极面对公关实战中遇到的压力和困难,相互影响,共同成长的故事。自2月18日首播以来,《完美关系》的收视率越来越高。3月11日,《完美关系》以6.92%的市场占有率高居收视榜榜首。但与此同时,也有不少吐槽和差评,主要集中在:剧情过于夸张,对公关行业的刻画不真实;共鸣等03《完美关系》豆瓣3.9分,有错吗?《完美关系》在豆瓣上已有60284人打分,目前评分仅为3.9。所以《完美关系》豆瓣评分3.9,有错吗?我们搜集整理了《完美关系》豆瓣影评资料。整个数据分析过程分为三个步骤:·数据获取·数据预处理·数据可视化下面是具体步骤和代码实现:获取数据本次我们选择豆瓣短评论的数据作为分析对象。由于豆瓣的限制,非登录状态下最多可获取200条数据,登录状态下最多可获取500条数据。为了解决登录问题,这次我们使用requests的Session方法,让代码自动保存cookie信息,维护登录和session保持状态。然后使用带有常规语句的Xapth来提取数据。如图所示,本次我们需要获取的主要内容如下:用户名用户主页评论时间评论星级短评论内容短评论投票数用户主页(用于获取城市)评分分布代码实现:#importrequiredpackageimportpandasaspdimportrequestsimportparselimportreimporttimefromfake_useragentimportUserAgentdeflogin_douban:"""功能:登录豆瓣,维护session形式"""globals#初始化session=requests.Session#登录地址login_url='https://accounts.douban.com/j/mobile/login/basic'#添加headersheaders={'user-agent':UserAgent.random}#formdataform_data={'name':'youraccount','password':'yourpassword','remember':'false'}#postlogintry:s.post(login_url,headers=headers,data=form_data)except:print("loginfailed")defget_one_page(url):"""功能:给定的URL地址,获取一页豆瓣电影的短评信息:paramurl:电影URL地址:return:returndataframe"""#Addheaders={'user-agent':UserAgent.random}#发起请求try:r=s.get(url,headers=headers,timeout=5)except:time.sleep(3)r=s.get(url,headers=headers,timeout=5)#解析网页data=parsel.Selector(r.text)#获取用户名user_name=[re.findall(r'.*?class="">(.*?).*',i)foriindata.xpath('//span[@class="comment-info"]').extract]#获取评分rating=[re.findall(r'.*?.*',i)foriindata.xpath('//span[@class="comment-info"]').extract]#获取评论时间comment_time=[re.findall(r'.*',i)foriindata.xpath('//span[@class="comment-info"]').extract]#获取短评论信息comment_info=data.xpath('//span[@class="short"]/text').extract#投票数votes_num=data.xpath('//span[@class="comment-vote"]/span/text').extract#获取首页URLuser_url=data.xpath('//div[@class="avatar""]/a/@href').extract#保存数据df_one=pd.DataFrame({'user_name':user_name,'rating':rating,'comment_time':comment_time,'comment_info':comment_info,'votes_num':votes_num,'user_url':user_url})returndf_onedefget_all_page(movie_id,page_num=25):"""功能:获取25页豆瓣电影短评信息:parammovie_id:电影ID:parampage_num:条数爬取的页面:返回:返回数据帧“”“df_25=pd.DataFrameforiinrange(page_num):#构造URLurl='https://movie.douban.com/subject/{}/comments?start={}&limit=20&sort=new_score&status=P'.format(movie_id,i*20)#callfunctiondf=get_one_page(url)#loopappenddf_25=df_25.append(df,ignore_index=True)#printprogressprint('我正在获取第{}页信息'.format(i+1))#睡眠一秒.sleep(1)returndf_25if__name__=='__main__':#第一次登录豆瓣login_douban#获得完美关系df_all=get_all_page(movie_id='30221758')print(df_all.shape)获取到的数据以数据框的形式存储,结果如下:从用户主页的地址可以进一步获取到用户的城市信息。这次一共得到了500条数据。数据预处理对于得到的数据,我们需要进行进一步的处理以满足可视化的需要。推荐星级:转为1~5分评论时间:转为时间类型,提取日期数据城市信息:有空缺、海外城市、错别字需要处理短评信息:需要分词处理一些关键codes:#处理评级列df['rating']=[re.sub(r'\[\'\"|\"\'\]','',i)foriindf['rating']]#替换空列表df['rating'].replace('','okay',inplace=True)#定义字典??rating_dict={'verybad':'1star','poor':'2star','不错':'3星','推荐':'4星','强烈推荐':'5星'}df['rating']=df['rating'].map(rating_dict)#分词处理forcommentinformation#合并成一篇文章txt=df['comment_info'].str.cat(sep='.')#添加关键词jieba.add_word('黄轩')jieba.add_word('佟丽娅')jieba.add_word('男主角')jieba.add_word('女主角')jieba.add_word('跳跃')jieba.add_word('颜值')jieba.add_word('吐槽')jieba.add_word('假装')jieba.add_word('国产剧')#读入停用词列表stop_words=withopen('stop_words.txt','r',encoding='utf-8')asf:lines=f.readlinesforlineinlines:stop_words.append(line.strip)#添加停用词stop_words.extend(['一','onepunch','一行','10','ahhh','句子','get','hahahaha','hahaha','越来越多','step','a','appearance','several','第一集','一点','第一','没看过','一集','第一次','二','二代','真','2020','It'samazing'])#评论字段分词处理word_num=jieba.analyse.extract_tags(txt,topK=100,withWeight=True,allowPOS=)#去除停用词word_num_selected=foriinword_num:ifi[0]not在stop_words:word_num_selected.append(i)key_words=pd.DataFrame(word_num_selected,columns=['words','num'])数据可视化我们使用pyecharts进行数据可视化分析,安装命令:pipinstallpyecharts。分析结果如下:在整体评分分布中,41.6%的人给了1星,其次是28.2??%的人给了5星。15.4%给它2星。可见,这部剧的两极分化非常严重。有些人特别喜欢给5星好评,同时也有很多人觉得拍的很烂。代码实现:score_perc=df['rating'].value_counts/df['rating'].value_counts.sumscore_perc=np.round(score_perc*100,2)print(score_perc)#绘制饼图frompyecharts.chartsimportPiefrompyecharts导入选项为optspie1=Pie(init_opts=opts.InitOpts(width='1350px',height='750px'))pie1.add("",[*zip(score_perc.index,score_perc.values)],radius=["35%","70%"])pie1.set_global_opts(title_opts=opts.TitleOpts(title='总分分布'),legend_opts=opts.LegendOpts(orient="vertical",pos_top="15%",pos_left="2%"),toolbox_opts=opts.ToolboxOpts)pie1.set_series_opts(label_opts=opts.LabelOpts(formatter="{c}%"))pie1.set_colors(['#D7655A','#FFAF34','#3B7BA9','#EF9050','#6FB27C'])pie1.render评分热度时间趋势评分热度主要集中在2月18日,也就是《完美关系》首播的日子,之后热度持续下滑。代码实现:df['comment_time']=pd.to_datetime(df['comment_time'])df['comment_date']=df['comment_time'].dt.datecomment_num=df['comment_date'].value_counts.sort_index#折线图frompyecharts.chartsimportLineline1=Line(init_opts=opts.InitOpts(width='1350px',height='750px'))line1.add_xaxis(comment_num.index.tolist)line1.add_yaxis('评论人气',comment_num.values.tolist,areastyle_opts=opts.AreaStyleOpts(opacity=0.5),label_opts=opts.LabelOpts(is_show=False))line1.set_global_opts(title_opts=opts.TitleOpts(title='timechart'),toolbox_opts=opts.ToolboxOpts,visualmap_opts=opts.VisualMapOpts(max_=200))line1.render评论用户城市分布观看评分人群主要集中在北京、上海、广州,其次是江苏、四川等地。代码实现:#国内城市top10city_top10=df['city_dealed'].value_counts[:12]city_top10.drop('foreign',inplace=True)city_top10.drop('notfilled',inplace=True)#barchartfrompyecharts.charts导入Barbar1=Bar(init_opts=opts.InitOpts(width='1350px',height='750px'))bar1.add_xaxis(city_top10.index.tolist)bar1.add_yaxis("city",city_top10.values.tolist)bar1.set_global_opts(title_opts=opts.TitleOpts(title="ReviewerTop10CityDistribution"),visualmap_opts=opts.VisualMapOpts(max_=50),toolbox_opts=opts.ToolboxOpts)bar1.rendercity_num=df['city_dealed']。value_countscity_num.drop('foreign',inplace=True)city_num.drop('notfilled',inplace=True)frompyecharts.chartsimportMap#mapmap1=Map(init_opts=opts.InitOpts(width='1350px',height='750px'))map1.add("",[list(z)forzinzip(city_num.index.tolist,city_num.values.tolist)],maptype='china')map1.set_global_opts(title_opts=opts.TitleOpts(title='国内城市分布的评论者'),visualmap_opts=opts.VisualMapOpts(max_=50),toolbox_opts=opts.ToolboxOpts)map1.render评论词云,讨论最多的词云是“黄轩”和“《佟丽娅》主演两大角色。其次,关于女配角“陈数”的讨论也很多。无论是陈数强大的职场新女性形象,还是惊艳干练的职场穿搭,都十分吸睛。然后是对“演技”和“剧情”的吐槽很多。“油腻”“尴尬”“狗血”等负面词频频出现在评价中。代码实现:#词云图frompyecharts.chartsimportWordCloudfrompyecharts.globalsimportSymbolTypeword1=WordCloud(init_opts=opts.InitOpts(width='1350px',height='750px'))word1.add("",[*zip(key_words.words,key_words.num)],word_size_range=[20,200],shape=SymbolType.DIAMOND)word1.set_global_opts(title_opts=opts.TitleOpts('完美关系豆瓣短评词云图'),toolbox_opts=opts.ToolboxOpts)word1.render那么你觉得《完美关系》怎么样?更多优质内容,您可以前往:疫情当前,宅家也可以提升自己,为未来积蓄能量——蓄势待发!