除了编码问题之外,还有一个问题就是不支持其它的博客。这个问题解决起来也不难,实际上源码中的大致框架已经确定,余下的仅仅是定义一些标签以及回调函数即可,对于java这很容易,比如定义下面类似的超类:
abstract class Site { public String atl_name; public String atl_value; public abstract int ParseIMG(NodeList nlist, int index); public abstract int ParseTITLE(NodeList nlist, int index); public abstract int ParseAUTHOR(NodeList nlist, int index); public abstract int ParseMonthArticle(NodeList nlist, int index); public abstract int ParsePerArticle(NodeList nlist, int index); public abstract int ParsePAGE(NodeList nlist, int index); }然后将源码中的方法进行一个类似下面的调整:
public static int parseImg(NodeList nlist, int index, Site st) { return st. ParseIMG(nlist, index); }同时小小修改一下HandleText方法的逻辑,比如类似下面的代码需要根据不同的子类来定义成不同的逻辑:
if (node instanceof Div)最终我们来定义特定于不同网站的不同的Site子类,分别实现不同的abstract方法即可。这里的关键点是,我们对于每一个博客网站抽象出来了几个要素:
1.博客标题,比如“黎明的丰收”
2.按照月份存档的链接链表
3.每月存档的文章链接链表
4.每月存档中的每一篇文章
5.每一篇文章中的每一个图片
6.第3类的分页显示处理
只要可以处理以上6个要素即可,因此定义了处理以上要素的超类Site,然后对于不同的博客站点分别实现对应的方法就行了,需要说明的是,目前还不能支持不能按月份索引的博客。
整个过程其实就是在使用htmlpaser解析页面的过程中采取一些动作将其下载到本地并且按照一定的规则进行保存。