用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)
|
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
关于用Java编程实现“网络蜘蛛” - 编程入门网的所有评论