您的位置:首页 > 其它

一个简单的爬虫,爬取豆瓣上某部电影的所有评论及计算评分

2019-01-02 15:03 369 查看

1.一个狗血的背景:这几天都在盼望着《云南虫谷》上映,早就想去看(奈何这是一部大烂片)。在看电影之前习惯性的先在豆瓣上看看评分,以免被坑。可是迟迟的等不到豆瓣的评分结果,所以决定自己爬取页面,来计算一下。(感谢web端还没有完全退出历史舞台)。

2.过程:
2.1 想起前几天好像在鼓捣Linux的时候,无意间执行了一个命令,把百度的首页面的html全都下载下来了。那就好办了。用java的HttpURLConnection类去访问网站并且用流读取网页。然后将其看成一个字符串,截取关键字,不就ok了(反正也是玩玩,就不用那种按页面的标签去遍历和获取内容了,用python更合适的)。
2.2

StringBuffer html = new StringBuffer(); URL url = new URL(urlString);

HttpURLConnection conn = (HttpURLConnection) url.openConnection();
InputStreamReader isr = new InputStreamReader(conn.getInputStream());
BufferedReader br = new BufferedReader(isr);
String temp;
while ((temp = br.readLine()) != null) {
html.append(temp).append("/n");
}
br.close();
isr.close();
String eveyHtml = html.toString();

这是核心的代码了。可是在访问的时候却报错503,服务器被禁止了,没有登录的原因。
2.3 在访问网页的时候加上这几行代码

conn.setRequestProperty("User-Agent","xxxxxx")
conn.setRequestProperty("Cookie","xxxxx")

登录状态的,在浏览器中F12可以获取到以上的两个属性。
2.4 现在开始执行main方法,可是在执行一段时间以后,依然是503 并且,手动在浏览器登录,也被禁止访问豆瓣,自己的账号登录也被禁止了。(大概是被豆瓣封ip了),于是在每次的执行完一页的时候“休息”3秒钟

Thread.sleep(3000);

这样就好了。
2.5 接下来计算评分和评论,就要看豆瓣网页的特点了。


所以呢

String[] chaArry = srcText.split("class=\"short\">");
String comment = chaArry[1].substring(0, chaArry[1].indexOf("</"));

就得到了评论的内容和每页的各种得分了。

2.6 至于计算豆瓣的评分的规则,是早期看到豆瓣CEO的一篇文章的时候他的简单介绍,现在肯定有高级的算法过滤掉一些水军的评论。这里只是简单的计算了一下

double oneStarPoint = (one / total) * oneInit;
double twoStarPoint = (two / total) * twoInit;
double threeStarPoint = (three / total) * threeInit;
double fourStarPoint = (four / total) * fourInit;
double fiveStarPoint = (five / total) * fiveInit;
//假设每颗星相当于2分,则改电影的豆瓣评分
double scoreTotal = (oneStarPoint + twoStarPoint + threeStarPoint + fourStarPoint + fiveStarPoint)
* twoInit;
System.out.println("《云南虫谷》电影的豆瓣评分为:" + scoreTotal);
return oneStarTotal;

2.7 最后开始运行

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: