网页爬虫 mysh-crawler

1 篇文章 0 订阅
1 篇文章 0 订阅

去年写了个网页爬虫, 放在 https://code.google.com/p/mysh-crawler/, google code 常被政府墙掉, 搞不懂代码有啥好墙的, 这里留个备份.

 

爬虫特点:

1. 插件驱动. 爬虫本身可视作http访问和持久化引擎, 爬虫的目标和数据处理由插件定义.

2. 高并发. 视自己的网络环境自由配置.

3. 持久化支持. 这里使用 MySQL, 要换的同学自行配置.

 

使用:

配置在 conf/mycrawler.properties

库表定义在 conf/sql.sql

程序入口在 mysh.crawler.core.MyshCrawler

 

 

自定义插件的行为由 Plugin 类定义.

 

package mysh.crawler.core;

import java.util.List;

/**
 * 爬虫插件,需要线程安全的实现. 需要定义无参构造器(与它被实例化的方式有关).
 * 
 * @author ZhangZhx
 * 
 */
public abstract class Plugin {

	private int hashCode = 0;

	@Override
	public final boolean equals(Object obj) {

		if (obj != null && obj.getClass().equals(this.getClass())) {
			return true;
		}
		return false;
	}

	@Override
	public final int hashCode() {

		if (this.hashCode == 0) {
			this.hashCode = this.getClass().getName().hashCode();
		}
		return this.hashCode;
	}

	/**
	 * 取插件定义的 URL 种子. 建议返回非空不可变对象.
	 * 
	 * @return
	 */
	public abstract List<String> getURLSeeds();

	/**
	 * 是否接受给定的页面.
	 * 
	 * @param pageURL
	 *               页面地址
	 * @return
	 */
	public abstract boolean isURLAccepted(String pageURL);

	/**
	 * 爬虫取得的页面供插件分析处理. 需要非阻塞、低计算消耗、线程安全的实现,以保证爬虫性能.
	 * 
	 * @param page
	 *               待处理的页面
	 */
	public abstract void putPageAnalyseResult(PageURLAnalyser.AnalyseResult analyseResult);

	/**
	 * 启动插件.<br/>
	 * 如果插件需要额外的启动指令, 或插件的某些动作需要保证在初始化完成后再执行, 可将动作放在这里.<br/>
	 * 此方法将在爬虫的启动器中被调用.
	 */
	public abstract void start();

	/**
	 * 停止插件.
	 */
	public abstract void shutdown();
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值