借鉴StanZhai核心代码,写了个博客园采集器,实现了文章正文和页面图片本地化,可以当成离线阅读器使用。
收录的文章,概要信息写入sqlite数据库,可实现标题、正文的检索,功能比较简单,自己用应该挺方便的。
自认为知识点有几个:
1、提取正文
一般来说,提取正文用正则要好一点,但是如果文章模板不同,那么写正则的工作量就太大了,并且也不好针对每个网页写正则。所幸,有高人早就对这个问题进行了研究,并进行了实现(百度“网页正文提取”)。找的资料中,翟士丹大师用c#做了一个很好的实现,看了两遍,感觉自己心思静不下来,思路能看懂,但是细节看不懂,可能有些是在具体实践中总结出来的,自己没有体会,所以领悟起来比较困难。索性就先不管了,直接拿来用吧。
2、多线程
自己用多线程写程序时,是另一个思路,感觉代码比较乱,不太灵活,在学习翟大师的采集器源码时,感觉豁然开朗,对C#的多线程理解一下子深刻许多。在对他的源码进行研究后,我决定重写一遍,一方面是学习借鉴,另一方面是改进。因为我有离线阅读的这个需求,因此,重点对这块进行了改进。在对含标签的正文保存成网页格式后,我又将正文去除标签后的文本保存为txt,在将来做检索时用。网页调用的图片,都下载到本地了,不过没有用多线程,只是用了普通的download。
3、界面假死
这是个初级问题,与上面两个比起来,简直不值一提。但是也拿来说说吧,如果能给其他同志带来帮助,也算有点用处吧。主要的实现就是三步:
public delegate void ShowMessDele(string str);
public void ShowMess(string str){ label1.text = str;};
Invoke(new ShowMessDele(ShowMess),new object[]{"显示信息";}); //本句在线程里执行
其他的感觉就没有什么值得说的地方了,还是上图吧,有图有真相。
软件连图标和布局都是借鉴翟大师的,真是不好意思了。如有意见,我马上改正。
在此衷心的感谢