好像有处理插件
1,从segment中读取<url, CrawlDatum>,将它放入相应的队列中,队列以queueId为分类,而queueId是由 协议://ip 组成,在放入队列过程中,
如果不存在队列则创建(比如javaeye的所有地址都属于这个队列:http://221.130.184.141) --> queues.addFetchItem(url, datum);
2,检查机器人协议是否允许该url被爬行(robots.txt) --> protocol.getRobotRules(fit.url, fit.datum);
3,检查url是否在有效的更新时间里 --> if (rules.getCrawlDelay() > 0)
4,针对不同协议采用不同的协议采用不同机器人,可以是http、ftp、file,这地方已经将内容保存下来(Content)。 --> protocol.getProtocolOutput(fit.url, fit.datum);
5,成功取回Content后,在次对HTTP状态进行识别(如200、404)。--> case ProtocolStatus.SUCCESS:
6,内容成功保存,进入ProtocolStatus.SUCCESS区域,在这区域里,系统对输出内容进行构造。 --> output(fit.url, fit.datum, content, status, CrawlDatum.STATUS_FETCH_SUCCESS);
7,在内容构造过程中,调取内容解析器插件(parseUtil),如mp3\html\pdf\word\zip\jsp\swf……。 --> this.parseUtil.parse(content); --> parsers.getParse(content);
8,我们现在研究html解析,所以只简略说明HtmlParser,HtmlParser中,会解析出text,title, outlinks, metadata。
text:过滤所有HTML元素;title:网页标题;outlinks:url下的所有链接;metadata:这东西分别做那么几件事情 首先检测url头部的meta name="robots" 看看是否允许蜘蛛爬行,
其次通过对meta http-equiv refresh等属性进行识别记录,看页面是否需要转向。
出处:http://www.aboutyun.com/thread-15619-1-1.html
|