对于一些内部网站,往往使用一些数字作为查询数据的key
对此,我们可以开发一些软件,用以获得包含在其中的数据。由于这些都是在内部使用的,因此其数据将有很重要的实用价值,当然,对于无法直接获得数据源的我们而言如此,但有时,也可以发掘一些连系统管理员也没有的数据,比如内部BBS的注册情况等。
言归正传,来讲这个程序。
语言选择了JAVA,因为对网络的支持比较好,而且主要原因是有可以直接使用的Http客户端,Apache的httpclient项目。
如何获得数据:这个问题的关键在于如何确定key的范围,对于查询网页,他的key往往拥有某种规律,怎么获得,问相关人士是最快的方式,当然也有逼不得已暴力尝试的时候。一旦确定范围,就可以用来组装客户端。就我个人来讲,我是使用了一个XML文件来描述这个request,其action,method,paramter等等。
获得数据如何处理:这个问题其实很重要,效率以及性能就是在这里体现的。最简单的,使用字符串匹配,比如,全文的第34个字符到65个字符是数据。这种方法速度快,但是适用性不强,换了页面就要重新计算。稍微好一点,使用正则表达式。这种方法的问题在于,很难获得不同的数据,比如对于一个页面,包含了姓名,id,ip,房间号码等数据,需要写不同的表达式,有的时候会比较麻烦,尤其是出现两个相同的数据,比如两个日期。
个人使用的方法倾向于XML,当然,也使用过正则。
XML的方式就是先使用JTidy对页面进行格式化,之后再使用JAXEN的XPath引擎进行XPath匹配。对于以表格方式出现的数据,XPath具有极大的优势。而且对于程序开发来讲,对于不同的页面,只用修改XPath语句以及数据存储的一部分,弄的好的话,可以极大降低开发成本,甚至完全可以用配置文件的方式对其进行配置。
数据的存储:数据库是很好的选择,但是有没有试过XML数据库?尤其是写小型的查询程序,把数据写入XML文件,之后使用XPath或者XQuery进行查询都是很好的选择。10万之内的纪录数都可以比较轻松的查询完。
事实上,相信大家都用过这样的软件,它的数据量大概是40万,他就是将数据存储到压缩过的XML文件中,使用时经过或者不经过压缩来获取。这个软件,叫做金山词霸.....
关于JTidy的使用,可以查看网上的文章,很简单,基本上照着例子就可以了。
对于XML和XPath的知识,IBM的开发者论坛是非常好的资料来源。
写这种程序的时候,希望不要以恶意的出发点来挖掘数据......