`
mysh
  • 浏览: 29501 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

网页爬虫 mysh-crawler

阅读更多

去年写了个网页爬虫, 放在 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();
}
2
1
分享到:
评论
5 楼 yuanzhen 2012-07-23  
看看    
4 楼 mysh 2012-07-22  
fncj 写道
朋友,好像少个 LIB 包呀 


包传上去了, 不好意思
3 楼 上官车月 2012-07-20  
少了一个你自定义的包哦,,,朋友


2 楼 fncj 2012-07-20  
朋友,好像少个 LIB 包呀 
1 楼 fncj 2012-07-20  
先看看,谢谢

相关推荐

    Mysh_hiroshiharada_

    【标题】"Mysh_hiroshiharada_" 暗示了这个压缩包可能与一个名为"Mysh"的项目或软件有关,同时与个人或团队名"Hiroshi Harada"有所关联。Hiroshi Harada可能是一位开发者或者项目负责人,他的名字被用于标记此资源,...

    基于mysh的跨语言Shell脚本设计源码分享

    该项目为基于mysh的跨语言Shell脚本设计,包含57个文件,涵盖Shell、Python、JavaScript和Java等多种编程语言。文件类型多样,包括25个Markdown文档、16个Shell脚本、3个Python脚本、2个JavaScript文件、2个文本文件...

    shell脚本定时检测服务健康指标

    检测服务监控脚本,可设置定时执行及...*/5 * * * * /bin/bash /home/mysh/service-health-check.sh &gt;/dev/null 2&gt;&1 开机启动: vim /etc/rc.local /bin/bash /home/mysh/service-health-check.sh &gt;/dev/null 2&gt;&1 &

    my_sh_lessons .rar

    标题 "my_sh_lessons .rar" 提供的信息表明这是一个压缩文件,其中包含了某个人用于教学的脚本程序。从描述 "本人上课用的脚本程序,大家不用下载" 我们可以推测,这些脚本可能与教授编程或者系统管理相关的课程有关...

    mysh999#db#MySQL启用审计操作记录1

    一、说明 二、安装 三、配置 四、建议关闭general log

    UNIX --文件属性和存取权限

    例如,如果想让所有用户都能读取`mysh.sh`文件,可以使用命令`chmod a+r mysh.sh`。这里`a+r`表示对所有用户(`a`)增加读权限(`+r`)。 综上所述,理解UNIX文件和目录的权限管理对于系统管理员来说至关重要。正确...

    mysh999#db#如何查询mysql主从是否同步1

    在主上查询配置的从库主机信息,其中repl是复制账号,该命令等同 SHOW PROCESSLIST \G;2、从库查询信息从库执行以下命令,查询同步状态如像以上

    (word完整版)操作系统概论实践作业.doc

    16. 将文件 mysh 访问权限改为文件主可执行:chmod +x mysh 17. 将文件 mysh 复制到上级目录中:cp mysh .. 18. 令 vi 返回前台,从中追加睡眠 1 分钟和返回前台的命令,从 vi 保存退出:fg; sleep 60 & fg 19. 以后...

    俄语电子计算机专业词汇.doc

    13. сайт в разработке (sait v razrabotke) - 网页正在建立中 14. процессор (protsessor) - CPU(中央处理器) 15. оперативная память (operativnaya pamять) - ...

    A-Simple-Shell:Shell接受用户命令,然后在单独的进程中执行每个命令

    下面的示例说明了提示mysh&gt;和用户的下一个命令:cat file1。 -mysh&gt; cat file1 要实现Shell接口,请首先让父进程读取用户在命令行上输入的内容(在本例中为cat prog.c),然后创建一个单独的执行该命令的子进程。...

    用shell脚本监控进程是否存在 不存在则启动的实例

    - **示例**:`0 4,12,21 * * * /bin/bash /home/mysh/monitorprocess.sh` 表示在每天的 4 点、12 点和 21 点执行 `/home/mysh/monitorprocess.sh`。 ### 5. 扩展知识点 #### Shell 的条件判断 在 Shell 脚本中,...

    代码片段管理工具 - CodeLib2 b6150

    NULL 博文链接:https://mysh.iteye.com/blog/1603786

    Linux重定向_All.pdf

    - "mysh &gt; mylog.txt 2&gt;&1" 将mysh命令的标准输出和错误都重定向到mylog.txt文件中。 - "wc 使用wc命令计算文件中的单词数,将文件file作为wc命令的标准输入。 - "cmd &gt;&gt; file 2&gt;&1" 将cmd命令的标准输出追加到文件...

    Linux上增加自定义脚本的展现量

    1. 同样修改`/etc/profile`,在文件尾部添加别名定义,如:`alias mysh=/root/mysh.sh`(使用脚本的全路径) 2. 刷新配置:`source /etc/profile` 3. 检查别名是否生效:`alias mysh` 4. 使用别名执行脚本:`mysh` ...

    linux下输入输出重定向.docx

    例如,mysh &gt; mylog.txt 2&gt;&1 就可以将标准输出和错误输出都重定向到 mylog.txt 文件中。 此外,我们还可以使用 /dev/null 来忽略标准输出或错误输出。例如,mysh &gt; /dev/null 2&gt;&1 就可以忽略标准输出和错误输出。...

    EXCEL查找代码

    brr = mysh.Range("a3:z" & mysh.Range("a65536").End(xlUp).Row) For i = 1 To UBound(arr) For j = 1 To UBound(brr) If brr(j, 1) = arr(i, 1) Then arr(i, 16) = brr(j, 22) arr(i, 17) = brr(j, 23) arr...

    thrift开发入门,php客户端调用java服务方,实现跨语言调用

    启动的时候进入 myserver/mysh/目录 然后运行 restart_thrift.sh 脚本就可以直接启动 ps 一下进程是否正常,如果错误请查看日志 然后就可以使用线下的php直接调用, 代码是从网上找到的,比较容易入门 当然也可以直接...

    Shell命令解释器

    要求实现一个简单的命令解释器,也就是linux中的shell程序,在本程序中我们将其起名为mysh,要求: 1、 能够执行外部程序命令,命令可以带参数; 2、 能够执行fg、bg、cd、history、exit等内部命令; 3、 使用管道和...

    struts+hibernate+mysql登录验证小实例

    这个“mysh注册小程序”可能包含了实现上述功能的源代码、配置文件和数据库脚本。开发者通常会看到以下几个部分: - Java源代码:包括Struts的Action类,以及使用Hibernate的DAO(Data Access Object)层。 - 配置...

Global site tag (gtag.js) - Google Analytics