WHY
每年要写年终总结,最近做的事情会记着,之前的却不一定记得那么清。个人有在 Trac 写日志的习惯,可以说是清楚的记载了工作内容,但是一天一天看也太浪费时间,而且效果也不好,没有一个实际的量化。于是就想着爬一下日志内容,分析下词频,这样就可以直观的看自己的工作内容了。
HOW
虽然也自学过一点python
,但是学的很基础,而且忘得也差不多了。马上就要交年终总结了,还是用自己习惯的语言吧。大概查了一下用C#
爬网页,觉得没啥问题,就开始了。嗯,没错了,想的容易,做起来总会遇到问题:
爬取html
这个还是简单的,毕竟是常用的东西,用System.Net.WebRequest
就行了。大概放下代码吧。
var request = WebRequest.CreateHttp(url);
var response = request.GetResponse();
var reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
var html = reader.ReadToEnd();
嗯,然后就报错了,人生总是这样,想的不够全面就执行,总会遇到问题。报错是因为需要证书,还有登录的操作,再查下怎么实现吧。
证书
嗯,查了一下,前人早就解决了证书的问题。stackoverflow.com
request.ClientCertificates.Add(new X509Certificate2(path, password))
登录
var cache = new CredentialCache();
cache.Add(new Uri(url), "Basic", new NetworkCredential(userName, userPassword));
request.Credentials = cache;
取日志内容
然后就是从html
中取日志的内容了,因为比较容易区分我就直接写正则了,就不粘代码了。
词频统计
用的是 jieba.NET ,github上的readme足够清晰,这里就不啰嗦了。
词云图
想着是用代码实现,但是试了几个,太丑了,不配放到年终总结里,查了一下有一个在线网站很好用。 wordart 偶尔需要穿越屏障用,操作很简单,将词频导入,设置你想要的形状(SHAPES),字体(FONTS,默认的没有中文字体 😄 ,需要手动导入)。
最终效果
html文件中包含,所有的日志,以及词频统计。
这个就是生成的词云图了。
还可以改进的地方
- 词频统计过滤掉没用的内容,比如符号,虽然
wordart
也支持过滤 - 多线程爬取,提升爬取效率,虽然一年只用一次。。。