口碑撲街!Python爬蟲揭示——為何《完美關係》表現遠不及預期?

2020-12-24 CDA數據分析師

CDA數據分析師 出品

最近一連出了好幾部職場劇,有孫儷主演講述房地產行業的《安家》,李易峰主演講律師的《我在北京等你》,以及佟麗婭、黃軒主演圍繞公關行業展開的《完美關係》。

其中,《安家》是翻拍自高分日劇《賣房子的女人》,《我在北京等你》講的是一名律師奮鬥的故事,《完美關係》則是國產職場劇涉及的又一全新行業——公關。

那麼這三部劇的口碑如何呢?

截止到目前為止,《安家》在豆瓣的評分為6.2分,《我在北京等你》豆瓣5.2分,《完美關係》為3.9分。都不是特別好的成績。

《完美關係》播出後更是有公關行業的小夥伴吐槽:我們不想被這麼代言啊!

那麼《完美關係》到底是哪裡差強人意呢?今天我們就先聊聊這部《完美關係》。

01近年頻頻撲街的國產職場劇

近年來,推出的國產職場劇還真不少,涉及的行業從地產、網際網路、醫療、到翻譯、律師等等,幾乎形形色色的行業都有。但這些劇的口碑如何呢?

先看幾部比較熱門的:

以上這些劇在播出時都頻頻上熱搜,但口碑就差強人意了。分數3.5-5.5不等,連6分及格線都不到。

相關行業的從業者也吐槽,根本沒有反應出行業的真實現狀,美其名曰職場劇,其實這不是披著行業外衣的偶像劇嘛!

進一步匯總國產職場劇的情況可以發現:

從2008年到2020年3月,共出品64部職場劇,近兩年職場題材更有井噴之勢,2018年和2019年每年都有13部,數量是2014年的13倍!

數量上來了,然後質量就堪憂了。從這些職場劇的豆瓣評分可見,平均分一直在5.5分徘徊。

02披著公關外衣的《完美關係》

那這次瞄準公關行業的《完美關係》能為國產職場劇正名嗎?

《完美關係》是由安建執導,黃軒、佟麗婭領銜主演,陳數、高露主演的都市職場劇。

故事講的是公關合伙人衛哲、江達琳等人從單槍匹馬到並肩作戰,積極迎接在公關實戰中遇到的壓力與困難,互相影響、共同成長的故事。

從2月18日首播以來,《完美關係》的收視率越來越高,3月11日《完美關係》憑藉6.92%的市場佔有率,拿下了收視率排行榜的冠軍寶座。

但同時收穫的吐槽和差評也不少,主要集中在:

劇情太浮誇,對公關行業的刻畫不真實;女主的傻白甜人設實在不討喜;演員的演技流於表面,難以產生共鳴等等03《完美關係》豆瓣3.9分到底冤不冤?

《完美關係》在豆瓣已有60284人進行評分,目前僅為3.9分。那麼《完美關係》豆瓣3.9分到底冤不冤呢?

我們對《完美關係》豆瓣的影評數據進行了收集整理。

整個數據分析的過程分為三步:

· 獲取數據

· 數據預處理

· 數據可視化

以下是具體的步驟和代碼實現:

獲取數據

此次我們選擇豆瓣短評的數據作為分析對象。由於豆瓣的限制,非登錄狀態下最多獲取200條數據,登錄狀態下最多獲取500條數據。

為了解決登錄的問題,此次我們使用requests的Session方法來讓代碼自動保存Cookie信息,維持登錄和會話保持狀態。然後使用Xapth配合正則語句進行數據的提取。

如圖所示,本次我們需要獲取的主要內容如下:

用戶名用戶主頁評論時間評論星級短評內容短評投票數用戶主頁(用於獲取城市)評分分布代碼實現:

# 導入所需包import pandas as pdimport requestsimport parselimport reimport timefrom fake_useragent import UserAgentdef login_douban:"""功能:登錄豆瓣,維持會話形式"""global s# 初始化sessions = requests.Session# 登錄地址login_url = 'ht tps:/ /accounts.douban.co m/j/mobile/login/basic'# 添加headersheaders = {'user-agent': UserAgent.random}# 表單數據form_data = {'name': '你的帳號','password': '你的密碼','remember': 'false'}# post登錄try:s.post(login_url, headers=headers, data=form_data)except:print("登錄失敗")def get_one_page(url):"""功能:給定URL地址,獲取豆瓣電影一頁的短評信息:param url: 電影URL地址:return: 返回數據框"""# 添加headersheaders = {'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)for i in data.xpath('//span[@class="comment-info"]').extract]# 獲取評分rating = [re.findall(r'.*?<span title=(.*?)></span>.*', i)for i in data.xpath('//span[@class="comment-info"]').extract]# 獲取評論時間comment_time = [re.findall(r'<span title=(.*)>.*', i)for i in data.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})return df_onedef get_all_page(movie_id, page_num=25):"""功能:獲取豆瓣電影25頁短評信息:param movie_id: 電影ID:param page_num: 爬取頁面數:return: 返回數據框"""df_25 = pd.DataFramefor i in range(page_num):# 構造URLurl = 'ht tps://movie.douban.co m/subject/{}/comments?start={}&limit=20&sort=new_score&status=P'.format(movie_id,i * 20)# 調用函數df = get_one_page(url)# 循環追加df_25 = df_25.append(df, ignore_index=True)# 列印進度print('我正在獲取第{}頁的信息'.format(i + 1))# 休眠一秒time.sleep(1)return df_25if __name__ == '__main__':# 先登錄豆瓣login_douban# 獲取完美關係df_all = get_all_page(movie_id='30221758')print(df_all.shape)

獲取的數據以數據框的形式存儲,結果如下:

從用戶主頁的地址可以進一步獲取到用戶的城市信息,此次共獲取500條數據。

數據預處理

對於獲取的數據,我們需要進行進一步的處理以滿足可視化的需求。

推薦星級:轉換為1~5分評論時間:轉換為時間類型,並提取日期數據城市信息:有未填寫數據、海外城市、寫錯的需要進行處理短評信息:需要進行分詞處理部分關鍵代碼:

# 處理評分列df['rating'] = [re.sub(r'\[\'\"|\"\'\]', '', i) for i in df['rating']]# 替換空列表df['rating'].replace('', '還行', inplace=True)# 定義字典rating_dict = {'很差': '1星','較差': '2星','還行': '3星','推薦': '4星','力薦': '5星'}df['rating'] = df['rating'].map(rating_dict)# 評論信息分詞處理# 合併為一篇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 = with open('stop_words.txt', 'r', encoding='utf-8') as f:lines = f.readlinesfor line in lines:stop_words.append(line.strip)# 添加停用詞stop_words.extend(['一部', '一拳', '一行', '10', '啊啊啊', '一句','get', '哈哈哈哈', '哈哈哈', '越來越', '一步','一種', '樣子', '幾個', '第一集', '一點','第一', '沒見', '一集', '第一次', '兩個','二代', '真的', '2020', '令人'])# 評論欄位分詞處理word_num = jieba.analyse.extract_tags(txt,topK=100,withWeight=True,allowPOS=)# 去停用詞word_num_selected = for i in word_num:if i[0] not in stop_words:word_num_selected.append(i)key_words = pd.DataFrame(word_num_selected, columns=['words','num'])

數據可視化

我們使用pyecharts進行數據可視化分析,安裝命令:pip install pyecharts。分析結果如下:

總體評分分布

有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)# 繪製餅圖from pyecharts.charts import Piefrom pyecharts import options as 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# 折線圖from pyecharts.charts import Lineline1 = 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='時間走勢圖'),toolbox_opts=opts.ToolboxOpts,visualmap_opts=opts.VisualMapOpts(max_=200))line1.render

評論用戶城市分布

觀看和評分人群主要集中在北上廣三地,其次是江蘇、四川等地。

代碼實現:

# 國內城市top10city_top10 = df['city_dealed'].value_counts[:12]city_top10.drop('國外', inplace=True)city_top10.drop('未填寫', inplace=True)# 條形圖from pyecharts.charts import Barbar1 = Bar(init_opts=opts.InitOpts(width='1350px', height='750px'))bar1.add_xaxis(city_top10.index.tolist)bar1.add_yaxis("城市", city_top10.values.tolist)bar1.set_global_opts(title_opts=opts.TitleOpts(title="評論者Top10城市分布"),visualmap_opts=opts.VisualMapOpts(max_=50),toolbox_opts=opts.ToolboxOpts)bar1.render

city_num = df['city_dealed'].value_countscity_num.drop('國外', inplace=True)city_num.drop('未填寫', inplace=True)from pyecharts.charts import Map# 地圖map1 = Map(init_opts=opts.InitOpts(width='1350px', height='750px'))map1.add("", [list(z) for z in zip(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

評論詞雲

而在詞雲方面討論最多的就是「黃軒」和「佟麗婭」兩大主演了。

其次關於女配「陳數」的討論也很多,無論是陳數這次強大的職場新女性人設,還是驚豔幹練的職場穿搭都是很吸睛的。

然後對「演技」和「劇情」上的吐槽也不少。評價中「油膩」、「尷尬」、「狗血」等負面詞頻頻出現。

代碼實現:

# 詞雲圖from pyecharts.charts import WordCloudfrom pyecharts.globals import SymbolTypeword1 = 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

那麼《完美關係》你怎麼看呢?

相關焦點

  • Python開發簡單爬蟲【學習資料總結】
    一、簡單爬蟲架構 將URL存放在關係型數據中 將URL存儲在緩存資料庫中 三、網頁下載器和urllib2模塊 網頁下載器類似於瀏覽器,會將網際網路對應的網頁以HTML的形式下載到本地,存儲成本地文件或內存字符串,然後進行後續的分析。
  • python 爬蟲學習路線:從入門到進階
    本文依舊需要有一些python基礎,至少要求掌握python語法。前置條件:python開發環境首先,學習python爬蟲,需要會:自己安裝python,python庫以及自己的編輯器。在這裡,涼拌推薦大家,找一個簡單的python教學視頻跟著老師學習。跟著老師寫基礎爬蟲的代碼,學習老師爬取網頁的思路,並且在這個過程中,學習自己不會的庫、函數、語法。先模仿,再獨立,體會爬蟲代碼在自己手中形成的過程,而不是只是跟老師把代碼抄一遍。
  • python爬蟲100個入門項目
    11新浪微博爬蟲分享(一天可抓取 1300 萬條數據)12新浪微博分布式爬蟲分享13python爬蟲教程,帶你從零到一14豆瓣讀書的爬蟲15鏈家網和貝殼網房價爬蟲6180s 影視資源爬蟲 - JianSo_Movie62各種爬蟲63心靈毒雞湯64糗事百科65python爬蟲的時候對Json數據的解析66秒爬,python爬蟲中的多線程,多進程
  • Python,爬蟲開發的不二選擇
    如果我們把網際網路比作一張大的蜘蛛網,數據便是存放於蜘蛛網的各個節點,而爬蟲就是一隻小蜘蛛,沿著網絡抓取自己的獵物(數據)。爬蟲指的是:向網站發起請求,獲取資源後分析並提取有用數據的程序。,目前市面上的開源爬蟲項目,Python佔百分八十的份額。
  • python開發爬蟲有門檻嗎?
    如果你不是科班出身,沒有開發經驗,初次接觸開發爬蟲這檔子事兒,相信這篇文章能幫到你。python開發爬蟲肯定是有門檻的。儘管python很簡單,上手不難,但是開發起來你會發現,開發爬蟲不只是單單會python就可以了,你還得需要下列這些技能。
  • 初學者如何用「python爬蟲」技術抓取網頁數據?
    想要入門Python 爬蟲首先需要解決四個問題:1.熟悉python編程2.了解HTML3.了解網絡爬蟲的基本原理4.學習使用python爬蟲庫1、熟悉python編程剛開始入門爬蟲,初學者無需學習python的類,多線程,模塊和其他稍微困難的內容。
  • Python視頻教程網課編程零基礎入門數據分析網絡爬蟲全套Python...
    因篇幅有限,以下展示的只是課程裡部分內容如對python課程有更多疑問 請諮詢客服 1零基礎入門全能班 01 –python簡介 02 第一個程序 03-python執行方式和pycharm設置 04-程序的注釋和算術運算符 05 程序執行原理 06變量的使用以及類型 07
  • Python爬蟲入門教程:超級簡單的Python爬蟲教程
    這是一篇詳細介紹 Python 爬蟲入門的教程,從實戰出發,適合初學者。讀者只需在閱讀過程緊跟文章思路,理清相應的實現代碼,30 分鐘即可學會編寫簡單的 Python 爬蟲。這篇 Python 爬蟲教程主要講解以下 5 部分內容:了解網頁;使用 requests 庫抓取網站數據;
  • python爬蟲篇二:HTTP協議六大方法
    爬蟲篇#,今後還有更多專題,感興趣的小夥伴先關注我吧!這裡面寫了禁止爬蟲爬取的內容,其實就是為了限制像「百度爬蟲」「搜狗」這樣的合法爬蟲。對於我們這些小爬蟲,我們不去遵守,自然就沒用了。下面是百度主頁下的robots文檔,在瀏覽器上就可以查看。baidu.com/robots.txtdisallow表示禁止爬取的目錄。
  • 開課吧Python:Python爬蟲是什麼?爬蟲工程師薪資怎麼樣?
    Python爬蟲是什麼?Python爬蟲是什麼?Python爬蟲是由Python程序開發的網絡爬蟲(webspider,webrobot),是按照一定規則自動抓取全球資訊網信息的程序或腳本。其實一般是通過程序在網頁上獲取你想要的數據,也就是自動抓取數據。為什麼需要用爬蟲?
  • python爬蟲百度圖片
    祝大家五一快樂最近和朋友聊天,說他想學學python數據分析這塊。正好自己也好久沒寫python了,於是昨天晚上寫了一個百度圖片的爬蟲,只要更改關鍵字,就能在百度圖片上爬取相應圖片。代碼附在文末。/usr/bin/env python# -*- coding:utf-8 -*-import osimport reimport urllibimport jsonimport socketimport urllib.requestimport urllib.parseimport urllib.error# 設置超時import timetimeout = 5socket.setdefaulttimeout
  • python為什麼叫爬蟲?為啥那麼多人通過python兼職都能掙不少錢?
    Python能做什麼之前有很多文章介紹python能做什麼。今天介紹python爬蟲的學習。網絡爬蟲 網絡爬蟲,也叫網絡蜘蛛(Web Spider)。爬蟲是在某個URL頁面入手,抓取到這個頁面的內容,從當前的頁面中找到其他的連結地址,然後從這地址再次爬到下一個網站頁面,這樣一直不停的抓取到有用的信息,所以可以說網絡爬蟲是不停的抓取獲得頁面上想要的信息的程序。還不懂?
  • 如何快速學會Python爬蟲(入門篇)
    Python爬蟲入門二之爬蟲基礎了解3. Python爬蟲入門三之Urllib庫的基本使用4. Python爬蟲入門四之Urllib庫的高級用法5. Python爬蟲入門五之URLError異常處理6.
  • 進階版python獲取天氣信息——爬蟲入門
    python定時獲取天氣數據並自動發送到郵箱中,調用了其它網站的天氣接口來獲取天氣。瀏覽器基於這些問題,今天我們就來個進階版的獲取天氣信息方法——爬蟲獲取,同時該例子也是理解入門爬蟲的最好例子。1.爬蟲先來講講爬蟲是什麼?爬蟲,又叫網絡蜘蛛,是一個探測的機器。它模擬人的行為去各個網站溜達,看到有用的信息就想自己下載下來保存一份。簡答一句話就是在網頁上提取我們想要的信息。
  • Python資料全家桶—網絡爬蟲入門到實踐,共計4.2G
    前言網絡爬蟲是一個模擬人類請求網站行為的程序 ,可以自動請求網頁,並將數據抓取下來,然後使用一定的規則來提取有價值的數據。網絡爬蟲的分類:通用爬蟲、聚焦爬蟲。業界內也很少叫蜘蛛的, 一般都叫做網絡爬蟲, Spider只是個別爬蟲的名稱。建議將詞條名稱改為網絡爬蟲。
  • Python爬蟲並自製新聞網站,太好玩了
    Flask是python中一個輕量級web框架,相對於其他web框架來說簡單,適合小白練手。使用Flask+爬蟲,教大家如何實時展示自己爬下來的數據到網頁上。先給大家展示一下這個醜醜的網頁 ↓(給個面子,別笑)整個流程就是簡單的三步:爬取數據利用實時爬取數據生成詞雲利用熱點推薦新聞爬虫部分這次爬蟲主要利用多線程方式爬取新浪新聞+網易新聞所有欄目新聞信息。
  • Python基礎進階之海量表情包多線程爬蟲功能的實現
    這篇文章主要介紹了Python基礎進階之海量表情包多線程爬蟲,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑑價值,需要的朋友可以參考下一、前言在我們日常聊天的過程中會使用大量的表情包
  • Python入門指南教程:10天學會使用python做爬蟲!免費領取!
    從去年開始,公眾號鋪天蓋地的python廣告,讓很多行外人也知道了python這個東西,python語言開始變得無所不能,剛畢業的新手用python能做什麼?前些天我弟弟突然聊天,推薦我學python,我把聊天截圖給了學計算機的楊先生。楊先生的解釋:python和C語言、java一樣是一門程式語言。學會了或許可以三分鐘做好excel的數據分析。但是,為了寫這個三分鐘的程序,你可能要花一個星期的時間。
  • Python——網絡爬蟲、登錄、代理設置
    在我們爬取數據時,如果一直使用同一個ip,很可能就會被進位訪問頁面,所以,做網絡爬蟲都躲不過去ip問題。1、代理基本原理代理,實際上就是代理伺服器(proxy server),它的功能是代理網絡用戶去取得網絡信息。形象地說,它是網絡信息的中轉站。在我們正常請求一個網站時,是發送了請求給web伺服器,web伺服器把響應傳回給我們。
  • Python無頭爬蟲Selenium系列(01):像手工一樣操作瀏覽器
    轉發本文並私信我"python",即可獲得Python資料以及更多系列文章(持續更新的)作為"數據玩家",如果手頭上沒有數據怎麼辦?當然是用代碼讓程序自動化採集數據,但是現在"爬蟲"不是那麼容易,其中最困難的即是突破網站各種反爬機制。