快速业务通道

用Java编程实现“网络蜘蛛” - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-24
ction getWorkloadProcessed() { return workloadProcessed; } /** *清空所有 */ public void clear() { getWorkloadError().clear(); getWorkloadWaiting().clear(); getWorkloadProcessed().clear(); } /** *设置一标志,使begin方法在完成之前返回 */ public void cancel() { cancel = true; } public void addURL(URL url) { if ( getWorkloadWaiting().contains(url) ) return; if ( getWorkloadError().contains(url) ) return; if ( getWorkloadProcessed().contains(url) ) return; log("正添加到工作区:" + url ); getWorkloadWaiting().add(url); } public void processURL(URL url) { try { log("正在处理:" + url ); //获取URL的内容 URLConnection connection = url.openConnection(); if ( (connection.getContentType()!=null) && !connection.getContentType().toLowerCase().s tartsWith("text/") ) { getWorkloadWaiting().remove(url); getWorkloadProcessed().add(url); log("不会进行正理,因为类型为:" + connection.getContentType() ); return; } //读取URL InputStream is = connection.getInputStream(); Reader r = new InputStreamReader(is); //解析URL HTMLEditorKit.Parser parse = new HTMLParse().getParser(); parse.parse(r,new Parser(url),true); } catch ( IOException e ) { getWorkloadWaiting().remove(url); getWorkloadError().add(url); log("错误:" + url ); report.spiderURLError(url); return; } //标记此URL已完成 getWorkloadWaiting().remove(url); getWorkloadProcessed().add(url); log("已完成:" + url ); } public void begin() { cancel = false; while ( !getWorkloadWaiting().isEmpty() && !cancel ) { Object list[] = getWorkloadWaiting().toArray(); for ( int i=0; (i processURL((URL)list[i]); } } /** *HTML解析器回调函数 */ protected class Parser extends HTMLEditorKit.ParserCallback { protected URL base; public Parser(URL base) { this.base = base; } public void handleSimpleTag(HTML.Tag t, MutableAttributeSet a,int pos) { String href = (String)a.getAttribute(HTML.Attribute.HREF); if( (href==null) && (t==HTML.Tag.FRAME) ) href = (String)a.getAttribute(HTML.Attribute.SRC); if ( href==null ) return; int i = href.indexOf(''#''); if ( i!=-1 ) href = href.substring(0,i); if ( href.toLowerCase().startsWith("mailto:") ) { report.spiderFoundEMail(href); return; } handleLink(base,href); } public void handleStartTag(HTML.Tag t, MutableAttributeSet a,int pos) { handleSimpleTag(t,a,pos); //以同样的方式处理 } protected void handleLink(URL base,String str) { try { URL url = new URL(base,str); if ( report.spiderFoundURL(base,url) ) addURL(url); } catch ( MalformedURLException e ) { log("找到畸形URL:" + str ); } } } /** *由内部调用来记录信息 *仅是把日志写到标准输出 * *参数entry为写到日志的信息 */ public void log(String entry) { System.out.println( (new Date()) + ":" + entry ); } }

例4:解析HTML(HTMLParse.java)

import javax.swing.text.html.*; public class HTMLParse extends HTMLEditorKit { public HTMLEditorKit.Parser getParser() { return super.getParser(); } }

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号