1、sosoo spider 开发指南 Sosoo 1.0 网络爬虫程序-用户开发手册编写人:王建华(rimen/jerry)编写目的:基于 sosoo 定 制 web spider 程序的编程人员。目录一: 安装 sosoo. 2二:功能定制. 21基本功能参数的设置。. 22配置机器人对 url 的检查. 33:实现文件管理。. 44定制 html 文档下载规则。. 45设 置对下载后 http 文档的过滤处理. 56启用机器人运行期监控。. 57启用对 http 协议分析的监 控。. 5三:sosoo 描述. 6四:应用开发指南. 61Roboter 类,spider 程序的主类。. 62T
2、askList 接口,解决对处理任务的存储。. 73Http 客户 端实现。. 74实现网页存储或处理. 75实现运行期的监控. 8五程序例 子. 9六参考依赖. 10一: 安装 sosoososoo 提供的是一个 sosoo-core.jar 包,其中并没有提供可运行的程序入口。如果要使用可以通过 test 中的 examples 进行体验。开发者可以基于在这上开发出基于 UI,j2ee 等 spider程序把 sosoo-core 包加 入到你应用的 classpath 中。Sosoo 提供一个基于多线程的来代表一个机器人 com.sosoo.robot.spider. Roboter。通
3、过一个测试类public static void main(String args) throws ExceptionRoboter robby = new Roboter();robby.setStartURL(new URL(“ http:/10.25.101.173:7001/pa18Web/framework/images/framevork_04.gif“);robby.setMaxDepth(0); / 设置最大连接访问深度robby.setSleepTime(0);robby.setWalkToOtherHosts(true);robby.run(); / 启动这样就启动了一个
4、spider 程序,sosoo 将根据你对 javaBean 参数的设置进行 对网络上html的抓取.停止机器人.robot.stopRobot(); 二: 功能定制Sosoo 利用回调的方式实现了 aop,用户可以通过进行功能 Bean 的实现加入程序在处理http 连接时的动作。1 基本功能参数的设置。就像上面例子上提到的 roboter 的原生类型参数(或 String) ,例如:startURL,maxDepth等。设 置开始处理的 url【startURL】:必须参数,roboter 会根据这个地址开始在网络上进行查找。robby.setStartURL(URL url);设 置从开
5、始路径能找的最大深度【maxDepth 】:程序会判断当前处理的连接深度是否超过最大连接深度,如果超过这个连接将忽略,当然你可以通过设置 depthIsEffect 来屏蔽这个功能。默认值为 1。robby.setMaxDepth(0);设 置处理文档的时间间隔【sleepTime】:当处理完一个 url 时,设置这个间隔时间处理下一个 url。单位为 s,默认值为 60,推荐使用 5s。robby.setSleepTime(0);设 置 http 连接超时时间:在连接服务器时,可能由于网络或者本身服务的原因,可能会出现超时的情况,通过设置超时时间来限制对某个 url 连接的最大时间,这样就可
6、以达到提供处理的速度,但是如果这个值设置太小,可能很多连接都回连接不到,建议使用大于 30 的值,默认为 60s。robby.setUrlConnectTimeOut(30);停 止 robby 线程【stopIt】:你可以通过对 robby 对象进行操作来停止当前的线程。robby.stopRobot();暂 停 robby 线程【sleep】:可以对当前运行的 robby 线程进行暂停。robby.setSleep(true);2 配置机器人对 url 的检查sosoo spider 会根据用户的设置对在收集 url 过程中过滤掉不符合条件的 url。过滤的顺序:walkToOtherHo
7、sts allowWholeHost flexibleHostCheckallowWholeDomain用户提供 url 列表。设置 是否访问其他的主机 【walkToOtherHosts 】:如果你需要进行整个互联网的搜索,而不现有你开始提供的 url 中的主机,把这个参数设置为 true。默认为 false。robby.setWalkToOtherHosts(true);设 置是否访问本主机【allowWholeHost 】:如果你只想要对开始 url 代表的主机进行访问,你可以通过设置这个参数进行过滤 url。robby.setAllowWholeHost(true);设 置非 www
8、开始的主机【flexibleHostCheck 】:当你提供的开始 url,不是以 www 开头,你可以通过设置 flexibleHostCheck 参数来达到访问本主机的目的。robby.setFlexibleHostCheck(true);设 置是否访问本域【allowWholeDomain 】:如果你只想要对开始 url 代表的域进行访问,你可以通过设置下面这个参数进行过滤 url。robby.setAllowWholeDomain(true);设 置要访问的 url 列表【allowedURLs】:这是一个 Vector 类型的变量,用户可以把这些url 放在配置文件中,用户可以在运行
9、时提供这个变 量。robby.setAllowedURLs(allowed);定制 url 检 查规则【URLCheck】:用户除了通过上面的规则进行 url 过滤,用户还可以通过实现 urlCheck 接口来进行 url 检测。系统已经提供了 RegExpURLCheck 实现。支持对properties 文件的支持。robby.setURLCheck(check);设 置是否要找网站跟目录下的/robot.txt 文件【ignoreRobotsTxt】:用户可以通过设置这个值来忽略网站提供对 robot 的支持。默认 为 falserobby.setIgnoreRobotsTxt(true
10、);设置 url 可以重复访 问【visitMany】:系统提供了一个访问过的列表缓存,当 spider 程序发现这个 url 已经访问过,他将不进行这个 url 的处理。可以通过这个参 数来定制可以重复访问的 url 列表,这是一个 Vector 类型。robby.setVisitMany(visitMany);设 置 spider 客户端的【proxy】:spider 可以通过代理连接 internate,但是目前只支持匿名的代理服务器。robby.setProxy(“10.16.111.5:80“);3: 实现文件管理。Spider 程序下载 url 对应的 html 文档的时候,系统提
11、供一个回调接口 HttpDocManager。你可以通过的持接口的 实现,把 spider 获得 html 数据进行存储,例如你可以把这些文件以文本流存入数据,存入文件系统等。系统提供了 HttpDocToFile 实现,把 下载的文件存入文件系统。你可以在启动 spider 程序的时候通过 robby.setDocManager(dm);进行注入管理对象。4 定制 html 文档下载规则。当你对各种 html 文件的格式处理有要求的时候,例如你觉得下载 exe,rar 文件比较慢 的时候,你可以通过自己的需求定制下载规则。通过实现 HttpDownloadCheck接口可以设定下载的规则。D
12、ownloadRuleSet rules=new DownloadRuleSet(“downrules.properties“);robby.setDownloadRuleSet(rules);系 统已经提供了 DownloadRuleSet 实现,这个是想通过 classpath properties 来定义下载规则.文件的内容:# the file must contain tow field,allowdeny and MIME Type/sub type# allow stand for if the doc match the conditions,will down the fil
13、e# deny stand for if the doc match the conditions,will not down the file# size ,express the doc contect byte size is much than the value# cant hold out the = or 10000000deny image/gif 10000000当 然你可以自定义自己的实现,只要实现 HttpDownloadCheck 的 boolean downloadAllowed(Vector httpHeaders) ; 方法。注意:如果这个文档没有下载,这个文档中
14、的连接将不能进行处理,所以一般不建议过滤掉 text/html.5 设置对下载后 http 文档的过滤处理下载文档后,用户可以对这个 doc 对象进行一系列的处理。Spider 提供了一个FilterChain 类。用户可以把自己过滤器加入 FilterChain 中。你可以实现 DocumentFilter 接口定制自己的功能,系统实现提供了一 个 LinkLocalizer 实现,用户替换相对连接。FilterChain filters=new FilterChain();DocumentFilter filter=new LinkLocalizer();filters.add(filte
15、r);robby.setFilters(filters); 6 启用机器人运行期监控。当启动 spider 程序后,程序利用回调接口提供给用户运行期的状态。例如你要要显示机器人对应的处理过的任务,处理中的 任务,处理是的状态。通过实现 RobotCallback 接口来实现,当然你也可以直接取 roboter 对象的属性来监控。系统提供 RobotMonitor 实现,用户打印在 cosole 上运行期的状态。RobotCallback monitor=new Monitor();robby.setWebRobotCallback(monitor);7 启用对 http 协议分析的监控。Spd
16、ier 循环处理缓存中未处理的 url,对于每个 url 的处理,系统提供一些监 控方法。当然你只要实现 HttpToolCallback 接口。系统提供了 SystemOutHttpToolCallback 实现。HttpToolCallback toolMonitor=new SystemOutHttpToolCallback();robby.setHttpToolCallback(toolMonitor);三:sosoo 描述sosoo 实际于 jobo 提供的核心算法。利用对访问的历史记录存储来替换 spider 的递给算法。在处理的 效率上有不错的体验,但是它也是牺牲存储为代价的。在
17、程序启动是,系统将建立两个 Vector 数组对访问 url 进行记录。因此 sosoo 并不使用于大数据量信息抓取,但是对于行业网站,中小企业绝对足够。目前 sosoo 提供对的处理功能:支 持跨域跨主机的访问支持多种文件格式的下载支持对 html 中连接的递规处理支持 http1.1 协议但不 支持 1.0支持匿名代理(http),但不知道需要验证代理。待扩展的功能:提供全 功能 http 协议处理提供 javasript 的支持提供表单 from 的处理支持提供对 ftp 协议的支持提 供全方位的代理(http,sock 等) 。完善系统监控功能加强对 html 文档的信息处理能力提供各
18、种 文件类型的处理工具四:应用开发指南sosoo 提供很强的编程扩展,很容易把他集成到你的 j2ee 项目中。在中小型搜索引擎中,特别对某一些特定的行业网站的数据进行分析时,Sosoo 提供方便和安全的解决方案。通 过上述对功能的定制,我们可以看到在应用中我们对 sosoo 的别称接口并不多,而且目前系统都是基于 set 的方式注入 aop 注入对象,这样很容易和 spring 等基于 set 方式的依赖注入框架集成。1Roboter 类,spider 程序的主类。当你需要把 sosoo 应用到 你的应用中事,roboter 提供一个基于线程的工具类。它体可在程序中启动,暂停,退出一个 spd
19、ier 程序。这个类有 sosoo 提供,并不支持扩展, 它标识spider 的主体。它是整个 spider 程序所有功能的入口,包括回调功能,都是通过 set 方式注入到 roboter 中。com.sosoo.robot.spider.Roboter例 如你要启动一个 spider 线程:Roboter robby = new Roboter();robby.setStartURL(new URL(“ http:/10.25.101.173:7001/pa18Web/framework/images/framevork_04.gif“);robby.setMaxDepth(0); / 设置
20、最大连接访问深度robby.setSleepTime(0);robby.setWalkToOtherHosts(true);robby.run(); / 启动2TaskList 接口,解决对处理任务的存储。对于 sosoo 而言,每个 url 对于一个任务。系统已经提供其默认的实 现,你可以根据自己的需求实现这个接口。然后在启动 spdier 的时候用 register 方法进行注册。robby .registerVisitedList(new HashedMemoryTaskList(false);robby .registerToDoList(new HashedMemoryTaskLis
21、t();com.sosoo.robot.spider.TaskList主 要解决是对 com.sosoo.robot.spider.RobotTask 对象的存储。和常用的操作方法,例如删除,添 加,查找等。具体参见JAVADOC3Http 客户端实现。目前对 sosoo1.0 客户端而言,主要的用途就是提供模拟浏览 器进行对 http 文档的获取。同时把他转换为 HttpDoc 对象。同时对 http 请求资源的管理,例如 cookie 管理。Sosoo 主要 是通过 com.sosoo.robot.http.HttpTool 工具类来提供此工能。你也可以自己定制更优化的处理方案替换,同样通过 register 方法进行注册。由于重载这个工具需要对 http协议有深刻的连接,一般不建议替换系统的实现。Robby.RegisterHttpParser(new HttpTool);