JSpider 用于抓取 WEB 资源、解析内容结果、再从解析的结果中寻找新 URL ,再抓取等
目前只支持下载 HTML ,不支持下载动态网页
事件转发流程(我们能自定义这种事件过滤链 ):
Rules 决定 Jspider 去取什么资源(定义它的行为和范围), Rules 一直执行,直到 decision 出现, decision 类型有:不关心:接受:忽略:禁止:
Plugins 是事件发生后我们采取的行动,这些行动可以是:写一个报告文件、在控制台上显示消息、写资源到磁盘、发邮件等。
Events filter 能选择哪些事件被哪些 Plugis 处理。
API 包括:
对象模型(站点、 URL 、内容、资源中的参考、 Cookies 等);
事件系统:
Engine 事件 ( 引擎开始、结束、配置、选择 )
Spdering 事件(站点发现、资源抓取、取资源错误)
Monitoring 事件(给信息关于进程与线程中断)
在 JSpiderEvent 类中有定义:
public static final int EVENT_TYPE_ENGINE = 1;
public static final int EVENT_TYPE_MONITORING = 2;
public static final int EVENT_TYPE_SPIDER = 3;
事件相关:
Model 类图:
Site 对象的状态 ( 依赖于文件 robots.txt) :
STATE_DISCOVERED
STATE_ROBOTSTXT_HANDLED
STATE_ROBOTSTXT_ERROR
STATE_ROBOTSTXT_UNEXISTING
STATE_ROBOTSTXT_SKIPPED
Resource 的状态
Discovered
Fetch_Ignored
Fetch_Error
Fetch_Forbidden
Fetched
Parse_Ignored
Parse_Error
Parse
配置分三个级别:
公共 (common) 级别:如日志配置。在蜘蛛的 common 目录下
蜘蛛 (generally) 级别:适用于所有站点
站点 (per-site) 级别:每个站点定制
公共级别。日志配置:
日志信息不记录事件信息,事件信息被转发到事件系统中(插件可选择将事件信息也输入日志) 。
日志支持 Log4j 与 JDK1.4 loggin (javax.util.loggin)
为了区别日志输出与插件输出,可以将日志系统关掉。即在 jspider.properies file 将 jspider.log.provider 改为: net.javacodeing.jspider.core.logging.impl.DevNullLogProvider 。
(直接将日志信息输往控制台
jspider.log.provider=net.javacodeing.jspider.core.logging.impl.SystemOutLogProvider )
用 Log4j 日志系统时配置 log4j.xml 文件
用 JDK1.4 的日志时配置 loggin.properties 文件。 ( 直接将 Log4j.jar 包移即用这个 )
蜘蛛级别(jspider.properties):
用代理,但验证未通过时,会返回 407 错误( FORBIDDEN )。
有两组线程池( Spider )与 (Thinkers) 。一个 thinker 线程能保持几个 spider 线程,默认是 1 对 5 。
用户代理配置 ( 由 Jspider 往外发的每一个 HTTP 请求能改变,用户代理也被用于去决定从一个站点的 robots.txt 的什么规则去应用,改变用户代理也改变 obeyed rules )
规则:
Net.javacodeing.jspider.mod.rule.OnlyHttpProtocolRule 。只抓以 http:// 开头的 URL
TextHtmlMimeTypeOnlyRule 只抓取 mime type 里包含 "text/html" 的 URL
AccepAllRule 接受所有 URLS
BaseSiteOnlyRule 仅仅 URL 是 base site 的一部分才接受 . (即只比较 URL 的 host 部分)
BoundedDepthRule URL 的深度要满足。有两个参数( depth.min 与 depth.max )
OnlyDeeperInSiteRule 仅仅接受在同一站点中但是比 base url 深度要深的 URL
ExternallyReferencedOnlyRule 仅仅接受被其他站点的资源引用的 URL
InternallyReferencedOnlyRule 仅仅接受被相同站点的资源引用的 URL
ForbiddenPathRule 不充许被接受的路径,只和 robots.txt 中同,参数( path )
MaxNumberOfURLParamsRuls 设置接收 URL 的最大个数,参数 (max)
MaxResourcesPerSiteRule 为每个站点设置接收 URL 的最大个数,参数 (max)
NoURLParamsRule 仅仅接受没有参数的 URL ,即 ”?name=quqi “之类
RejectAllRule 拒绝所有的规则
站点级配置(per-site):
对一个站台的一部分限制访问的配置:
site.rules.spider.count=1
site.rules.spider.1.class= net.javacoding.jspider.mod.rule.ForbiddenPathRule
site.rules.spider.1.config.path=/apidocs
robots.txt 文件:任何 web 服务器上如果放有 robots.txt 文件,那么 JSpider 会去遵守 robots.txt 所定的访问权限。如果有 robots.txt 文件但是是取 robots.txt 文件失败那么这个站点上的文件均被忽略。
扼杀 (throtting) :用来防止web 服务器崩溃 , ,而去设置 Jspider 多经常什么时候去发送请求。 Throtting 控制线程,如果必要阻塞它们直到他们被充许去做下一个请求。即控制上一个请求与发出下一个请求之时的时间隔。
设置 Cokees : 设置它的一个最大目的可能是可在一个 session 中做完任务,不用每次都去建立连接。
规则 Rools : 想看这些可在 velocity-dump.out 文件中看。
插件配置( Plugin.properties ):插件是对事件的 action ,是我们着重感兴趣的地方。它接收事件通知,访问 model 完成相关行动。
默认插件类型:
Console: 往控制台上打信息
Velocity: 通过客户化模板写报告文件
FileWriter: 写信息到文件系统中
StatusBasedFileWriter: ( 根据 URL 状态写文件, 200.out 是所有良好的资源, 404.out 是错误的资源, 301.out 是所有转发的资源等 )
DiskWriter: 每抓取下来一个文件就往文件系统中写,写资源内容,用于下载资源)