package com.heaton.bot;
import com.heaton.bot.*;
import java.net.*;
/**
* The SpiderWorker class performs the actual work of
* spidering pages. It is implemented as a thread
* that is created by the spider class.
*
* Copyright 2001-2003 by Jeff Heaton (http://www.jeffheaton.com)
*
* @author Jeff Heaton
* @version 1.2
*/
public class SpiderWorker extends Thread {
/**
* The URL that this spider worker
* should be downloading.
*/
protected String target;
/**
* The owner of this spider worker class,
* should always be a Spider object.
* This is the class that this spider
* worker will send its data to.
*/
protected Spider owner;
/**
* Indicates if the spider is busy or not.
* true = busy
* false = idle
*/
protected boolean busy;
/**
* A descendant of the HTTP object that
* this class should be using for HTTP
* communication. This is usually the
* HTTPSocket class.
*/
protected HTTP http;
/**
* Constructs a spider worker object.
*
* @param owner The owner of this object, usually
* a Spider object.
* @param http
*/
public SpiderWorker(Spider owner,HTTP http)
{
this.http = http;
this.owner = owner;
}
/**
* Returns true of false to indicate if
* the spider is busy or idle.
*
* @return true = busy
* false = idle
*/
public boolean isBusy()
/SPAN>
return this.busy;
}
/**
* The run method causes this thread to go idle
* and wait for a workload. Once a workload is
* received, the processWorkload method is called
* to handle the workload.
*/
public void run()
{
for ( ;; ) {
target = this.owner.getWorkload();
if ( target==null )
return;
owner.getSpiderDone().workerBegin();
processWorkload();
owner.getSpiderDone().workerEnd();
}
}
/**
* The run method actually performs the
* the workload assigned to this object.
*/
public void processWorkload()
{
try {
busy = true;
Log.log(Log.LOG_LEVEL_NORMAL,"Spidering " + target );
http.send(target,null);
Attribute typeAttribute = http.getServerHeaders().get("Content-Type");
// if no content-type at all, its PROBABLY not HTML
if ( typeAttribute==null )
return;
// now check to see if is HTML, ONLY PARSE text type files(namely HTML)
owner.processPage(http);
if ( !typeAttribute.getValue().startsWith("text/") )
return;
HTMLParser parse = new HTMLParser();
parse.source = new StringBuffer(http.getBody());
// find all the links
while ( !parse.eof() ) {
char ch = parse.get();
if ( ch==0 ) {
HTMLTag tag = parse.getTag();
Attribute link = tag.get("HREF");
if ( link==null )
link = tag.get("SRC");
if ( link==null )
continue;
URL target=null;
E: 7.5pt"> try {
target = new URL(new URL(this.target),link.getValue());
} catch ( MalformedURLException e ) {
Log.log(Log.LOG_LEVEL_TRACE,
"Spider found other link: " + link );
owner.foundOtherLink(link.getValue());
continue;
}
if ( owner.getRemoveQuery() )
target = URLUtility.stripQuery(target);
target = URLUtility.stripAnhcor(target);
if ( target.getHost().equalsIgnoreCase(
new URL(this.target).getHost()) ) {
Log.log(Log.LOG_LEVEL_NORMAL,
"Spider found internal link: " + target.toString() );
owner.foundInternalLink(target.toString());
} else {
Log.log(Log.LOG_LEVEL_NORMAL,
"Spider found external link: " + target.toString() );
owner.foundExternalLink(target.toString());
}
}
}
owner.completePage(http,false);
} catch ( java.io.IOException e ) {
Log.log(Log.LOG_LEVEL_ERROR,
"Error loading file("+ target +"): " + e );
owner.completePage(http,true);
} catch ( Exception e ) {
Log.logException(
"Exception while processing file("+ target +"): ", e );
owner.completePage(http,true);
} finally {
busy = false;
}
}
/**
* Returns the HTTP descendant that this
* object should use for all HTTP communication.
*
* @return An HTTP descendant object.<
/FONT>
*/
public HTTP getHTTP()
{
return http;
}
}
文章出处:http://www.diybl.com/course/3_program/java/javajs/200797/69988_4.html
文章出处:http://www.diybl.com/course/3_program/java/javajs/200797/69988_3.html
文章出处:http://www.diybl.com/course/3_program/java/javajs/200797/69988_2.html
文章出处:http://www.diybl.com/course/3_program/java/javajs/200797/69988.html
分享到:
相关推荐
网络爬虫源代码解析 本文将对网络爬虫源代码进行详细的解析,了解爬虫的实现机制和关键技术要点。 爬虫的基本概念 网络爬虫是一种自动化程序,用于从互联网上抓取和提取数据。爬虫可以根据特定的规则和算法来抓取...
【标题】"基于JAVA的网络爬虫程序源代码"是一个涉及网络爬虫技术的Java编程项目,它提供了实现网络爬虫功能的完整源代码。网络爬虫是互联网上的自动化工具,用于系统地浏览、抓取网页信息并存储到本地数据库或文件中...
通过以上分析可以看出,这段代码实现了基本的网络爬虫功能,包括初始化、多线程抓取、异常处理以及线程间的同步与通信等关键组件。这对于理解网络爬虫的工作原理及其在实际应用中的实现具有重要的参考价值。
本压缩包文件包含的"搜索网页采集网络爬虫java源代码"为开发者提供了一个实现这一功能的实例。 首先,让我们深入了解一下Java网络爬虫的基础知识: 1. **HTTP协议**:网络爬虫的基础是HTTP(超文本传输协议),它...
在这个压缩包中,你将找到一个Python爬虫源代码示例,它可能涵盖了以下关键知识点: 1. **HTTP请求**:使用requests库发送GET或POST请求,获取网页内容。例如,`response = requests.get('http://example.com')`,...
在本资源中,我们关注的是"自己动手写爬虫源代码(第6章)",这是罗刚所著《自己动手写爬虫》一书的一个章节的源代码。这个压缩包包含了作者经过调试和优化,可以顺利运行的代码示例,旨在帮助读者深入理解和实践...
标题中的“易车车型口碑点评-python爬虫源代码”表明这是一个使用Python编程语言编写的爬虫程序,专门用于抓取易车网站上的汽车车型口碑评价数据。易车是中国知名的汽车信息和服务平台,提供了丰富的汽车资讯和用户...
这个项目包含了从设计思路、技术选型、代码实现到最终答辩的完整流程,对于学习Java和网络爬虫技术的学生来说具有很高的参考价值。 首先,网络爬虫是互联网信息抓取的重要工具,它能自动化地遍历网页,提取所需信息...
本资源包含四种网络爬虫的源代码,全部基于Java编程语言,这为开发者提供了深入学习和定制爬虫功能的宝贵资料。以下是这四种爬虫的简要介绍及其关键知识点: 1. **Weblech**: Weblech是一个开源的Java网络爬虫...
通过学习和实践其中的代码,用户不仅可以掌握Python爬虫的基础知识,还能深入了解Scrapy框架的高级功能,提升网络数据抓取和处理的能力。对于想要从事数据采集、数据分析或者Web开发的人来说,这是一个非常有价值的...
爬虫,全称为网络爬虫,是自动化地在互联网上抓取信息的程序,它能够按照一定的规则,遍历网页,提取所需数据。在这个课设中,你将有机会深入理解爬虫的工作原理,掌握其基本技术和应用。 首先,让我们从“Python”...
这个项目源代码是很好的学习和参考材料,可以帮助你快速掌握C#网络爬虫的开发技巧。 总之,C#网络爬虫程序设计涉及到网络编程、HTML解析、多线程/异步、文件操作等多个方面。通过深入理解这些知识点,并结合实际...
在本项目中,"爱卡汽车车型口碑点评评论-python爬虫源代码2022" 提供了一种利用Python爬虫技术从爱卡汽车网站抓取汽车车型的用户口碑和评论的方法。通过运行源代码,我们可以获取指定车型的全部评价数据,并将其整理...
【标题】豆Ban电影爬虫_Python爬虫网站源代码.rar是一个包含Python爬虫源代码的压缩包,专门用于抓取豆Ban电影相关数据。这个爬虫程序可能用于收集电影信息,如电影名称、评分、评论、演员阵容等,以供数据分析或...
《自己动手写网络爬虫(全书源代码)》是一本深入浅出的教程,旨在帮助读者理解网络爬虫的工作原理并亲手实践编写。...无论是对网络爬虫感兴趣的初学者,还是想要提升技能的专业人士,这份资源都是一个宝贵的参考资料。
这句话意味着提供了一个学习资源,可能是项目源代码或教程,供对使用VC++编写爬虫感兴趣的人参考。通过学习和分析这个资源,你可以了解如何设置网络爬虫项目,配置项目结构,编写网络请求和响应处理的代码,以及如何...
源代码的提供使得学习者可以直接查看和理解爬虫的工作原理,从而加深对Python网络爬虫编程的理解。 【标签】:虽然没有直接给出标签,但根据项目内容可以推断出相关的标签: 1. Python爬虫:该项目使用Python语言...
"计算机毕业设计源代码"的标签突出了这个项目的教育背景和用途,它可能对其他学习C#编程或者对网络爬虫技术感兴趣的学生有所帮助,作为参考或学习资源。 【文件名称列表】 虽然没有具体的文件列表,但根据标题,...
4. 实现网页下载器,获取HTML源代码。 5. 开发网页解析器,解析网页内容并提取有用信息。 6. 设计数据输出器,将抓取的数据保存到文件或数据库中。 7. 进行调试和测试,确保爬虫的稳定性和准确性。 8. 分析爬虫运行...
分布式数据库课程大作业-项目名称:分布式网络爬虫+源代码+文档说明+实验报告 - 不懂运行,下载完可以私聊问,可远程教学 该资源内项目源码是个人的毕设,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分...