Skip to main content

Trac-DailyReportAnalysis

· 4 min read
Alec.Ji

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,默认的没有中文字体 😄 ,需要手动导入)。

最终效果

IMG html文件中包含,所有的日志,以及词频统计。

IMG 这个就是生成的词云图了。

还可以改进的地方

  • 词频统计过滤掉没用的内容,比如符号,虽然wordart也支持过滤
  • 多线程爬取,提升爬取效率,虽然一年只用一次。。。

项目地址

github

REF