分类:
2008-11-08 22:56:35
其实spider实现很简单,但一个完善的解决方案绝对不是那么简单的,他是一个客户端的概念,但要做一个高效、可以拿来给搜索做数据来源的,那就不只是一个简单的spider了,要结合搜索的整个过程,给出搜索想要的数据,那才是一个可用的spider,分布式就少不了,所以他又是一个服务器。
简单地分析一些重点和难点,列举出来,然后会一个一个的讨论,找出可行的解决方案,写出代码以,然后组成一个系统,如下:
<1>网页抓取的目标文件(.html, .htm, .txt, ...)要可配。抓取有不同的需求,程序写成可配,灵活度就高了。
<2>建立URL库(已访问、未访问等),不同的URL要有不同的重要度,建立这个重要度的标准是一个难点。
<3>IP范围的控制(可针对特定的搜索,在抓取后分析IP对应的网站类型或同一网站不同页面的类型进行归类)不同重要度的页面定期收集的间隔不一样。
<4>DNS缓存功能。这是提高spider爬取速度的一个重要功能,用于连接目标页面的http服务器的。
<5>连接超时、下载超时。这个必要的了,呵呵
<6>网页存储、压缩、存储方式问题。存储是个大头,互联网上那么多网页,存储不压缩,没有格式是不行的。
<7>HTTP 1.1的支持。长连接,提高效率的,技术实现,其实这个可不简单。
<8>同时访问同一个IP的并发度控制,防DDOS问题。这是个重要的问题,线程连接、和服务器分配URL问题。
<9>网页去重问题,HASH或者BLOOMFILTERS的方法,重点哦。
<10>网页二次访问问题,不同重要度的网页,二次访问的间隔不同。这个又是重要度的问题。
<11>域名与IP的对应问题,两个不同IP相同文件路径,指向同一页面,这个问题可以优先级应该是比较低的,但也是实现的一部分。
<12>相似网页问题,对内容相似的网页进行分类,排序出重要度,这个难点,特别是对我来说。
<13>网页搜集的深度方案,重要度不同,深度不同,又是重要度与深度的结合,这个很重要。
<14>网页文件解析,这是个大头,普通的静态动态网页,更高级的抓取 javascript以及ajax等等。
<15>实现XML可配,可扩展,归档,支持海量URL数量,分布,C/S结构(服务器分布也使用CS结构),线程池,连接池,对象池等等技术。
这里的大部分问题有许多解决的方法,要参考一些开源项目,还有GOOGLE的原理,当然都要自己做设计的,看来问题真得很多,努力,加油,要做就要做好!!