慶餘年“真的”被大家喜歡嗎?Java爬蟲分析告訴你結果

導語

慶餘年
【慶餘年】這部電視,從11月份播出到現在,以迅雷不及掩耳之勢崛起,迅速霸佔電視劇熱度頭條,隨着第一季的結束,基本劇情已經被大部分電視迷所熟知了,不可否認,這部電視的確是一部構思獨特的故事。

一開始,大家都認爲是穿越劇的題材,演繹到最後,竟然是科幻片的經典,的確令人所料不及,很多看過書的小說迷(據說這部小說熱度也很高),一直在劇透。

  • 五竹是機器人?
  • 陳萍萍的椅子裏面有散彈槍?
  • 範閒的母親給他留下了一把98K(狙擊槍)?

各種評論,劇透,灌水無疑給這部電影帶來了瘋狂的人氣效應!作者貓膩,估計也吸粉無數了。

但是,小編一直認爲這部電視,編劇很爛,劇情很浮誇,演技不夠精湛,人員關係也錯亂不堪,爲什麼還這麼火?到底電視迷是誇的多呢,還是罵的多呢,爲了瞭解實際情況。今天,我就用Java爬蟲寫了一個爬蟲,爬取了愛奇藝和豆瓣電視的熱度及評論,分析一下,看看結果,也讓大家做個見證,這部電影,到底是好是壞。

好了,話不多說,我們開始寫Java爬蟲代碼,具體分析!

首先,打開豆瓣,查看豆瓣評論入口

在這裏插入圖片描述
打開豆瓣(https://movie.douban.com/subject/25853071/comments?sort=new_score&status=P),可以看到,豆瓣中 有一個評論的頁面,到現在爲止,總共記載了40220條短評數據,當然,這些評論的數據,是根據網友投票數來排序的。

使用抓包工具,可以看到,每次評論翻頁,會調用接口:

https://movie.douban.com/subject/25853071/comments?start=20&limit=20&sort=new_score&status=P

接口裏面,只是start的參數不同,其餘都是一樣的。
在這裏插入圖片描述
請求後,返回的結果是JSON串,裏面封裝了HTML代碼:
HTML代碼
從分析來看,對這個接口,一直循環,就可以把所有的評論得到。

根據抓包分析結果,寫Java爬蟲代碼

根據抓包的結果,只需要循環調用GET接口就可以得到所有的評論數據,那麼下一步就開始寫爬蟲代碼。

//獲取列表的方法
public boolean getList(String ip ,int port, int page, SqlSession session) {
		boolean rets = false;
		//初始化HttpClient
		DefaultHttpClient httpClient = HttpClientUtuils.handleNewHttpClient(120000, 120000) ;
		//預留代理接口
		if(ip!=null && !ip.equals("")){
			 HttpHost proxy = new HttpHost(ip,port);
			 httpClient.getParams().setParameter(ConnRouteParams.DEFAULT_PROXY, proxy);
		}
		
		String sg1 = "" ;
		HttpGet g1 = null;
		try {
			//GET請求豆瓣評論區
			g1 = new HttpGet("https://movie.douban.com/subject/25853071/comments?start="+(page*20)+"&limit=20&sort=new_score&status=P&comments_only=1") ;			
			g1.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36") ;
			HttpResponse response2 = httpClient.execute(g1);			
			sg1 = EntityUtils.toString(response2.getEntity(),"utf-8") ;		
			sg1 = StringRandomUtils.unicodeToString(sg1) ;
			//System.out.println(sg1);
						
			if(response2.getStatusLine().getStatusCode() == 200 && sg1.indexOf("{\"r\": 0") != -1 &&  sg1.indexOf("<div class=\\\"comment-item\\\"") != -1 ){
				//遍歷結果得到評論數據
				while(sg1.indexOf("<div class=\\\"comment-item\\\"") != -1) {
					
					String comentId = "" ;
					String comentPersonId = "" ;
					int votes = 0 ;
					String comentPersonName = "" ;
					String comentLevel = "" ;
					String comentDate = "" ;
					String comments = "" ;
					
					sg1 = sg1.substring(sg1.indexOf("<div class=\\\"comment-item\\\"") + 4) ;
					sg1 = sg1.substring(sg1.indexOf("data-cid=") + 4) ;
					sg1 = sg1.substring(sg1.indexOf("\"") + 1) ;
					comentId = sg1.substring(0, sg1.indexOf("\\")).replace("\r", "").replace("\n", "").trim() ;
					comentId = EmojiFilter.filterEmoji(comentId);
					
					if(sg1.indexOf("<a title=") != -1) {
						sg1 = sg1.substring(sg1.indexOf("<a title=") + 4) ;
						sg1 = sg1.substring(sg1.indexOf("\"") + 1) ;
						comentPersonName = sg1.substring(0, sg1.indexOf("\\")).replace("\r", "").replace("\n", "").trim() ;
						comentPersonName = EmojiFilter.filterEmoji(comentPersonName);
						
						if(sg1.indexOf("href=\\\"https://www.douban.com/people/") != -1) {
							sg1 = sg1.substring(sg1.indexOf("people/") + 7) ;
							comentPersonId = sg1.substring(0, sg1.indexOf("/")).replace("\r", "").replace("\n", "").trim() ;
						}
					}
					
					if(sg1.indexOf("<span class=\\\"votes\\\">") != -1) {
						sg1 = sg1.substring(sg1.indexOf("<span class=\\\"votes\\\">") + 4) ;
						sg1 = sg1.substring(sg1.indexOf(">") + 1) ;
						String votestr =  sg1.substring(0, sg1.indexOf("<")).replace("\r", "").replace("\n", "").trim() ;
						try{
							votes = Integer.parseInt(votestr) ;
						}catch(Exception e){
							System.out.println(e.toString());
						}
					}
					
					if(sg1.indexOf("<span class=\\\"allstar") != -1) {
						sg1 = sg1.substring(sg1.indexOf("<span class=\\\"allstar") + 4) ;
						sg1 = sg1.substring(sg1.indexOf("title=\\\"") + 4) ;
						sg1 = sg1.substring(sg1.indexOf("\"") + 1) ;
						comentLevel = sg1.substring(0, sg1.indexOf("\\")).replace("\r", "").replace("\n", "").trim() ;
						
					}
					
					if(sg1.indexOf("<span class=\\\"comment-time \\\"") != -1) {
						sg1 = sg1.substring(sg1.indexOf("<span class=\\\"comment-time \\\"") + 4) ;
						sg1 = sg1.substring(sg1.indexOf("title=\\\"") + 4) ;
						sg1 = sg1.substring(sg1.indexOf("\"") + 1) ;
						comentDate = sg1.substring(0, sg1.indexOf("\\")).replace("\r", "").replace("\n", "").trim() ;
						
					}
					
					if(sg1.indexOf("<span class=\\\"short\\\">") != -1) {
						sg1 = sg1.substring(sg1.indexOf("<span class=\\\"short\\\">") + 4) ;
						sg1 = sg1.substring(sg1.indexOf(">") + 1) ;

						comments = sg1.substring(0, sg1.indexOf("<")).replace("\r", "").replace("\n", "").trim() ;
						comments = EmojiFilter.filterEmoji(comments);
					}
					
					//打印結果
						System.out.println(comentId + "--" + comentPersonId + "--" + comentPersonName+ "--" + votes + "--" + comentLevel + "--" + comentDate + "--" + comments);
				}

			}else{
				System.out.println("請求失敗");
				Thread.sleep(60000);
				getList(ip ,port,  page,  session) ;
			}
			rets = true;
		}catch(Exception e){
			System.out.println(e.toString());
			e.printStackTrace() ;
			rets = false;
		}finally{
		//關閉httpclient
//			if(httpClient !=null){
// 				httpClient.getConnectionManager().shutdown();       
// 			}
		}
		
		sg1 = null ;

		return rets;
	}

結果,程序抓包運行到11頁的時候發現,後面的數據,竟然無法抓取了,總共抓取了220條數據。好吧,可能豆瓣也對爬蟲做了限制措施。既然無法爬取到所有的數據,那就對着200多條數據,做一個分析。

【慶餘年】豆瓣評論分析

分析使用圖表和詞雲方式展示。

1. 【慶餘年】電視劇愛奇藝熱度排行榜

在這裏插入圖片描述
從愛奇藝的熱度排行榜來看,【慶餘年】以8715分熱度,排名第一,下面接着是【精英律師】和【劍王朝】,熱度榜中,我是更爲喜歡【劍王朝】一些,雖然它的熱度不如【慶餘年】。
.

2. 【慶餘年】豆瓣短評評論分佈

在這裏插入圖片描述
豆瓣評論中,慶餘年的好評率達到73%,差評,僅僅16%,一般11%,可見,大部分人對慶餘年的評論,還是偏向於積極方向的,不過這個數據,有些片面,畢竟,這只是人數比,不能完全說明情況。下面我們繼續分析。
.

3. 【慶餘年】豆瓣各種評論數排行分佈

在這裏插入圖片描述
這個評論數據,是針對我們抓取的結果進行的分析,200多條數據中,有104條評論顯示,很差,有70多條數據顯示較差!
從這裏可以看到,【慶餘年】的口碑好似很差,80%以上的有效評論,竟然都是負面評論,終於,數據揭開了人氣效應背後的真相!電視的質量,真的如此不堪?
不過不要着急,我們繼續看其他分析結果。

4. 【慶餘年】豆瓣各類評論投票數總和分佈

在這裏插入圖片描述
大家都知道,豆瓣是可以投票的,那我就對投票的總數做了一個分析!
但是從數據分析,我竟然看到了一個和評論數不一樣的結果,評論數顯示,大部分是差評,然而投票數,推薦(4星)卻遙遙居榜首,力薦(5星)居榜3位!
其實,從這裏,大概可以看出,這部電視,雖然罵的人很多,但是挺的人也不少!
.

5. 【慶餘年】豆瓣最熱投票評論前20條

那就看看評論的前20,都說了一些什麼?
在這裏插入圖片描述

  • 評論第一名,是一位叫做 紅骷髏 的豆瓣用戶評論的,內容是:達康書記的臉配上陳萍萍的名字,有種莫名的喜感。 這個評論,比較中肯(哈哈,貌似沒有說錯了),屬於推薦指數!
  • 評論第二名,是一位叫做 -Alice的豆瓣用戶評論的,內容是:帶着鐐銬能把舞跳這麼好我是很服的,開頭的穿越設定很驚豔,第一集這個還原度真心沒得說,小范閒人畜無害的笑我可太喜歡了,必須五星好評走起來,等一手我最愛的大東山之戰~
  • 從評論前20來看,有13個評論屬於推薦級別,有5個評論,屬於貶低內容的,但總體來看,推薦的指數, 還是遠遠高於貶低指數。

6. 【慶餘年】電視熱播度隨日期變化情況

下面看看,從11月26號以來,電影的評論熱度。
在這裏插入圖片描述

  • 大概可以看到,11月26號,熱度很高,98個評論,後面的評論數,就越來越低了,可能是我拿到數據太少的問題,這裏只能做一個參考。

7. 【慶餘年】關鍵詞詞雲

最後,對【慶餘年】這部電視,評論的關鍵詞做了一個詞雲,看看大家都是怎麼說的吧!
在這裏插入圖片描述

  • 從詞雲上來看,陳道明是這部電視的一個魂,很多人,估計就是奔着這個演員去的
  • 內容貌似有褒有貶,說法不一!
  • 但是無疑,貓膩作者火了

總結

從Java爬蟲抓包得到的數據,大概是瞭解了【慶餘年】基本的狀況。當然,這部電視,也有值得誇獎的地方,但是也有不足的地方,從網絡評論來看,也是褒貶不一,沒有一個統一的說法。但是從輿論造勢來看,這是一部成功的作品,它已經很完美的引起了大家的注意,獲取了足夠的熱度。當然,希望貓膩作者不急不躁,能繼續給我們帶來更好的作品!

寫在最後

Java爬蟲作爲一個分析工具,的確很有效,有會Java,喜歡爬蟲的朋友,可以加我的微信公衆號,上面有Java爬蟲入門的一些教程,歡迎關注啊!公衆號:Java爬蟲之家。

從零入門學Java爬蟲,希望你喜歡!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章