当前位置: 首页 > >

庆余年“真的”被大家喜欢吗?Java爬虫分析告诉你结果

发布时间:



文章目录
导语首先,打开豆瓣,查看豆瓣评论入口根据抓包分析结果,写Java爬虫代码【庆余年】豆瓣评论分析1. 【庆余年】电视剧爱奇艺热度排行榜2. 【庆余年】豆瓣短评评论分布3. 【庆余年】豆瓣各种评论数排行分布4. 【庆余年】豆瓣各类评论投票数总和分布5. 【庆余年】豆瓣最热投票评论前20条6. 【庆余年】电视热播度随日期变化情况7. 【庆余年】关键词词云
总结写在最后



导语


【庆余年】这部电视,从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代码:

从分析来看,对这个接口,一直循环,就可以把所有的评论得到。


根据抓包分析结果,写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("

//遍历结果得到评论数据
while(sg1.indexOf("

String comentId = "" ;
String comentPersonId = "" ;
int votes = 0 ;
String comentPersonName = "" ;
String comentLevel = "" ;
String comentDate = "" ;
String comments = "" ;

sg1 = sg1.substring(sg1.indexOf("
sg1 = sg1.substring(sg1.indexOf("data-cid=") + 4) ;
sg1 = sg1.substring(sg1.indexOf(""") + 1) ;
comentId = sg1.substring(0, sg1.indexOf("\")).replace(" ", "").replace("
", "").trim() ;
comentId = EmojiFilter.filterEmoji(comentId);

if(sg1.indexOf(" comentPersonName = sg1.substring(0, sg1.indexOf("\")).replace(" ", "").replace("
", "").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(" ", "").replace("
", "").trim() ;
}
}

if(sg1.indexOf("") != -1) {
sg1 = sg1.substring(sg1.indexOf("") + 4) ;
sg1 = sg1.substring(sg1.indexOf(">") + 1) ;
String votestr = sg1.substring(0, sg1.indexOf("<")).replace(" ", "").replace("
", "").trim() ;
try{
votes = Integer.parseInt(votestr) ;
}catch(Exception e){
System.out.println(e.toString());
}
}

if(sg1.indexOf(" sg1 = sg1.substring(sg1.indexOf(" sg1 = sg1.substring(sg1.indexOf("title=\"") + 4) ;
sg1 = sg1.substring(sg1.indexOf(""") + 1) ;
comentLevel = sg1.substring(0, sg1.indexOf("\")).replace(" ", "").replace("
", "").trim() ;

}

if(sg1.indexOf(" sg1 = sg1.substring(sg1.indexOf(" sg1 = sg1.substring(sg1.indexOf("title=\"") + 4) ;
sg1 = sg1.substring(sg1.indexOf(""") + 1) ;
comentDate = sg1.substring(0, sg1.indexOf("\")).replace(" ", "").replace("
", "").trim() ;

}

if(sg1.indexOf("") != -1) {
sg1 = sg1.substring(sg1.indexOf("") + 4) ;
sg1 = sg1.substring(sg1.indexOf(">") + 1) ;

comments = sg1.substring(0, sg1.indexOf("<")).replace(" ", "").replace("
", "").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爬虫,希望你喜欢!



友情链接: 时尚网 总结汇报 幼儿教育 小学教育 初中学习资料网