高并发、分布式爬虫 Pholcus 0.8.5 发布

henrylee2cn
 henrylee2cn
发布于 2016年03月23日
收藏 92

Pholcus 0.8.5 发布,此版本优化多项功能(如新增cmd版服务端、客户端,细化历史记录粒度等)、修复多个bug,并减少诸多依赖包,为发布1.0稳定版做准备。

Pholcus(幽灵蛛)是一款纯Go语言编写的高并发、分布式、重量级爬虫软件,支持单机、服务端、客户端三种运行模式,拥有Web、GUI、命令行三种操作界面;规则简单灵活、批量任务并发、输出方式丰富(mysql/mongodb/csv/excel等)、有大量Demo共享;同时她还支持横纵向两种抓取模式,支持模拟登录和任务暂停、取消等一系列高级功能。

pholcus web 版
更新详情如下所示:

一、命令行相关功能升级

1. cmd界面版增加对服务端与客户端模式的支持;

2. 新增丰富的命令行参数,且优先级高于配置文件。

二、配置文件更新

1. 增加更多可配置项;

2. 重新规范代码,配置参数为优先级最低的默认信息。

三、Spider结构体调整

1. Keyword改为Keyin,相应操作界面中“自定义输入”改为“自定义配置”(多任务时应分别多包裹一层“<>”);

2. MaxPage字段改为Limit,相应操作界面中“最大页数”改为“采集上限”(默认限制url请求数);

3. 添加subName,用于区分多任务并发的情况;

4. 允许在规则的Root()中进行阻塞;

5. 优化动态规则加载的错误处理。

四、调度器与历史记录模块升级

1. 增强历史记录功能,历史记录与Spider实例一一对应,且与输出操作保持同步更新;

2. 修复调度器在32位系统下panic的bug。

五、输出模块优化

1. 修改mysql输出模块,支持多行批量插入,修改默认连接池容量为2048,提升输出速率与稳定性;

2. mgo的insert方法更新,内部增加分批插入控制,默认为5000条,提升写入数据库的稳定性;

3. 修复连接池捕获panic的bug。

六、其他

1. 解决某些规则的代码片段在手动终止任务后依旧默默运行的问题,减少资源消耗;

2. 解决大量任务长时间运行后手动终止操作耗时太长的问题,加快终止操作响应速度;

3. 调整运行时目录文件;

4. 将大部分依赖包合并到项目中;

5. 修复一些bug。

本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处,尊重他人劳动共创开源社区。
转载请注明:文章转载自 开源中国社区 [http://www.oschina.net]
本文标题:高并发、分布式爬虫 Pholcus 0.8.5 发布
加载中

最新评论(19

henrylee2cn
henrylee2cn
这个后缀,你也可以在 config.ini 中指定
henrylee2cn
henrylee2cn
要保证文件后缀是 .pholcus.html
henrylee2cn
henrylee2cn

引用来自“tianpeng91”的评论

请教下,对于海量url去重,这个怎么做的呢?bloom对于 大量的url不行

引用来自“henrylee2cn”的评论

针对每个任务有唯一对应的历史记录的,不必读全部记录。若还是量很大可以运行分布式,在每个任务基础上做一下分片及其负载均衡。

引用来自“tianpeng91”的评论

你这个现在去重是怎么做的呢?

引用来自“henrylee2cn”的评论

一个特定任务对应一个历史记录(分成功、失败两种),成功记录的是url+method的特征值,失败记录的是Request序列化信息。每次运行相同规则且Keyin相同、记录历史记录为true,才会加载对应记录。此记录先会保存在内存,每次输出结果时同步一次。

引用来自“tianpeng91”的评论

那你存储到哪里呢?文件?
与你当前任务的输出位置保持一致
tianpeng91
tianpeng91

引用来自“tianpeng91”的评论

请教下,对于海量url去重,这个怎么做的呢?bloom对于 大量的url不行

引用来自“henrylee2cn”的评论

针对每个任务有唯一对应的历史记录的,不必读全部记录。若还是量很大可以运行分布式,在每个任务基础上做一下分片及其负载均衡。

引用来自“tianpeng91”的评论

你这个现在去重是怎么做的呢?

引用来自“henrylee2cn”的评论

一个特定任务对应一个历史记录(分成功、失败两种),成功记录的是url+method的特征值,失败记录的是Request序列化信息。每次运行相同规则且Keyin相同、记录历史记录为true,才会加载对应记录。此记录先会保存在内存,每次输出结果时同步一次。
那你存储到哪里呢?文件?
JohanZ
JohanZ

引用来自“JohanZ”的评论

go get github.com/henrylee2cn/pholcus

引用来自“JohanZ”的评论

直接报错了,go1.6

引用来自“henrylee2cn”的评论

和那个go版本无关,应该是翻墙包没法下载的问题,你从readme中找到依赖包的压缩包链接,从那里直接下载。

引用来自“JohanZ”的评论

汗,你都没问我报什么错,我不知道大家有没碰到,我这没墙
# github.com/henrylee2cn/pholcus/app/spider
/Users/johan/workspace/go/src/github.com/henrylee2cn/pholcus/app/spider/parsejs.go:57: vm.Eval undefined (type *otto.Otto has no field or method Eval)
/Users/johan/workspace/go/src/github.com/henrylee2cn/pholcus/app/spider/parsejs.go:71: vm.Eval undefined (type *otto.Otto has no field or method Eval)
/Users/johan/workspace/go/src/github.com/henrylee2cn/pholcus/app/spider/parsejs.go:83: vm.Eval undefined (type *otto.Otto has no field or method Eval)
/Users/johan/workspace/go/src/github.com/henrylee2cn/pholcus/app/spider/parsejs.go:95: vm.Eval undefined (type *otto.Otto has no field or method Eval)
/Users/johan/workspace/go/src/github.com/henrylee2cn/pholcus/app/spider/parsejs.go:107: vm.Eval undefined (type *otto.Otto has no field or method Eval)

引用来自“henrylee2cn”的评论

你的otto包版本不对,去下依赖包吧,这个最稳妥。
https://github.com/pholcus/dependent/archive/master.zip
问题解决,感谢
henrylee2cn
henrylee2cn

引用来自“JohanZ”的评论

go get github.com/henrylee2cn/pholcus

引用来自“JohanZ”的评论

直接报错了,go1.6

引用来自“henrylee2cn”的评论

和那个go版本无关,应该是翻墙包没法下载的问题,你从readme中找到依赖包的压缩包链接,从那里直接下载。

引用来自“JohanZ”的评论

汗,你都没问我报什么错,我不知道大家有没碰到,我这没墙
# github.com/henrylee2cn/pholcus/app/spider
/Users/johan/workspace/go/src/github.com/henrylee2cn/pholcus/app/spider/parsejs.go:57: vm.Eval undefined (type *otto.Otto has no field or method Eval)
/Users/johan/workspace/go/src/github.com/henrylee2cn/pholcus/app/spider/parsejs.go:71: vm.Eval undefined (type *otto.Otto has no field or method Eval)
/Users/johan/workspace/go/src/github.com/henrylee2cn/pholcus/app/spider/parsejs.go:83: vm.Eval undefined (type *otto.Otto has no field or method Eval)
/Users/johan/workspace/go/src/github.com/henrylee2cn/pholcus/app/spider/parsejs.go:95: vm.Eval undefined (type *otto.Otto has no field or method Eval)
/Users/johan/workspace/go/src/github.com/henrylee2cn/pholcus/app/spider/parsejs.go:107: vm.Eval undefined (type *otto.Otto has no field or method Eval)
你的otto包版本不对,去下依赖包吧,这个最稳妥。
https://github.com/pholcus/dependent/archive/master.zip
JohanZ
JohanZ

引用来自“JohanZ”的评论

go get github.com/henrylee2cn/pholcus

引用来自“JohanZ”的评论

直接报错了,go1.6

引用来自“henrylee2cn”的评论

和那个go版本无关,应该是翻墙包没法下载的问题,你从readme中找到依赖包的压缩包链接,从那里直接下载。
汗,你都没问我报什么错,我不知道大家有没碰到,我这没墙
# github.com/henrylee2cn/pholcus/app/spider
/Users/johan/workspace/go/src/github.com/henrylee2cn/pholcus/app/spider/parsejs.go:57: vm.Eval undefined (type *otto.Otto has no field or method Eval)
/Users/johan/workspace/go/src/github.com/henrylee2cn/pholcus/app/spider/parsejs.go:71: vm.Eval undefined (type *otto.Otto has no field or method Eval)
/Users/johan/workspace/go/src/github.com/henrylee2cn/pholcus/app/spider/parsejs.go:83: vm.Eval undefined (type *otto.Otto has no field or method Eval)
/Users/johan/workspace/go/src/github.com/henrylee2cn/pholcus/app/spider/parsejs.go:95: vm.Eval undefined (type *otto.Otto has no field or method Eval)
/Users/johan/workspace/go/src/github.com/henrylee2cn/pholcus/app/spider/parsejs.go:107: vm.Eval undefined (type *otto.Otto has no field or method Eval)
henrylee2cn
henrylee2cn

引用来自“tianpeng91”的评论

请教下,对于海量url去重,这个怎么做的呢?bloom对于 大量的url不行

引用来自“henrylee2cn”的评论

针对每个任务有唯一对应的历史记录的,不必读全部记录。若还是量很大可以运行分布式,在每个任务基础上做一下分片及其负载均衡。

引用来自“tianpeng91”的评论

你这个现在去重是怎么做的呢?
一个特定任务对应一个历史记录(分成功、失败两种),成功记录的是url+method的特征值,失败记录的是Request序列化信息。每次运行相同规则且Keyin相同、记录历史记录为true,才会加载对应记录。此记录先会保存在内存,每次输出结果时同步一次。
tianpeng91
tianpeng91

引用来自“tianpeng91”的评论

请教下,对于海量url去重,这个怎么做的呢?bloom对于 大量的url不行

引用来自“henrylee2cn”的评论

针对每个任务有唯一对应的历史记录的,不必读全部记录。若还是量很大可以运行分布式,在每个任务基础上做一下分片及其负载均衡。
你这个现在去重是怎么做的呢?
返回顶部
顶部