自己用 go 写的分布式爬虫,欢迎大家拍砖

2015-03-25 21:54:06 +08:00
 wcong

ants-go

最进在用golang开发的一个分布式的爬虫
github:https://github.com/wcong/ants-go

由来

一直用scrapy抓数据。scrapy的分布式部署,需要人⼯分配抓取链接,感觉很麻烦,一直想搞一个自动分发请求的分布式爬虫。
基于scrapy改了一简陋的分布式爬虫ants,但是动态语言写起来有些混乱,正好正在学go,就用go写了一个分布式爬虫ants-go
爬虫架构参考是scrapy,分布式的架构参考的是elasticsearch.
目前已经可以试用,欢迎大家来拍砖.

主要的功能

主要模块

欢迎拍砖,欢迎fork,欢迎一起完善

github:https://github.com/wcong/ants-go

17080 次点击
所在节点    分享创造
22 条回复
coosir
2015-03-25 22:01:58 +08:00
各个node执行完将结果发[挥]master
wcong
2015-03-25 22:04:42 +08:00
@coosir ......,手残党
qiang1012
2015-03-25 22:22:16 +08:00
正好要学go语言,star之!
Tink
2015-03-26 00:40:31 +08:00
这个看起来很厉害啊
ericls
2015-03-26 06:53:56 +08:00
很厉害 虽然不懂go
xiaoyaoking
2015-03-26 07:39:07 +08:00
搞这么多专业名词瞬间感觉自己啥都不懂了。。。
qloog
2015-03-26 13:41:16 +08:00
都开始自己写 分布式爬虫了,赞~~
scrapy 还不太懂的路过吧。。
kevinroot
2015-03-27 23:23:46 +08:00
聪神威武~~~
wcong
2015-03-29 19:35:38 +08:00
@kevinroot 好巧
monnand
2015-03-30 09:32:08 +08:00
还没有看代码,但是从代码组织上看,不太符合Go语言的规范。参见Go的官方文档: http://blog.golang.org/organizing-go-code

看这句:

Sometimes people set GOPATH to the root of their source repository and put their packages in directories relative to the repository root, such as "src/my/package". On one hand, this keeps the import paths short ("my/package" instead of "github.com/me/project/my/package"), but on the other it breaks go get and forces users to re-set their GOPATH to use the package. Don't do this.

简单说:

把src/下面的代码都放到根目录下,修改相应的import path,让你的程序可以直接用go get安装。
wcong
2015-03-30 10:50:03 +08:00
@monnand 是有这个问题,thx,我立马改一下
wcong
2015-03-30 11:49:03 +08:00
@monnand 我考虑了一下,因为这不是一个传统的第三方库的项目,是一个完整的应用程序,需要依赖外部的conf,log等目录,所以把src/的代码都放到根目录下,有点不太合理
monnand
2015-03-30 12:15:00 +08:00
@wcong 其实,你这个疑问(以及你的理由)已经是go社区里的月经问题了。我简单给你总结一下之前的讨论。具体内容你可以去golang-nuts列表里讨论(鉴于这个问题已经属于月经问题了,很可能会被要求你在列表里先搜索一下答案)

简单的回答是:你的需求和别的Go程序没什么区别,不要把代码放src里再让用户去修改GOPATH。你的项目的确不是“传统的”第三方库,但是是一个传统的Go可执行程序。所以还是依照传统方法解决。

示例项目参见Go语言作者之一Brad Fitz的camlistore:

https://github.com/camlistore/camlistore

一个简单的理由是:用户自己配置的编辑器和各种开发环境,都会依赖当前设置的GOPATH。而如果每个项目都去让用户添加一个目录到GOPATH里面,各种工具之间就很难协调。

至于其他理由,你可以去golang-nuts上面去搜索,我就不在这里细说了。

标准的做法是这么做的:

如果你的项目是github.com/myname/myproj,项目下有一个自己写的log库,在log/目录下,那么引用这个库的时候,import path就应该是github.com/myname/myproj/log。

还有一些参考例子,比如Google的cAdvisor项目: https://github.com/google/cadvisor
monnand
2015-03-30 12:31:42 +08:00
@wcong 一条简单的原则是:绝大多数情况下,如果你的Go项目中有一个存放你自己代码的目录叫src,那很可能是你没有按照规范来写。

具体理由我就不细说了,还是我刚才说的,你去golang-nuts那边搜索一下,或者发个邮件问问就好了。这里列举几个比较标准的Go项目,可以参考一下他们的组织结构,一下所有的项目,都是“完整的应用程序”,而非(仅仅是)第三方库:

- 来自Google的kubernetes,一个项目包含多个可执行程序和库: https://github.com/GoogleCloudPlatform/kubernetes
- 来自Google的cAdvisor: https://github.com/google/cadvisor
- Go语言作者之一Brad Fitz的camlistore: https://github.com/camlistore/camlistore
- 同样是Brad Fitz的goimports: https://github.com/bradfitz/goimports
- 语法级别的自动补全程序,gocode: https://github.com/nsf/gocode
- etcd: https://github.com/coreos/etcd

还有很多,我就不一一列举了我想这些项目应该可以作为比较好的示例(尤其是Brad Fitz的项目)。
wcong
2015-03-30 17:30:14 +08:00
@monnand thx,这些信息很有帮助,我好好学习一下
hustlzp
2015-03-30 18:19:00 +08:00
收藏了
monnand
2015-03-30 18:39:09 +08:00
@wcong 不客气。和其他语言一样,Go语言有自己的一套独立的规范。个人觉得现在的官方文档把内容放得太分散,导致初学者必须把几份文档合在一起看。最好的办法还是看看官方的实际项目,这样有助于了解这个语言和相应工具的使用
wcong
2015-03-30 20:23:12 +08:00
已经参照的规范改过来了
cgcs
2015-04-01 14:53:05 +08:00
@monnand 我来拜一下大神的
jusonalien
2016-02-19 23:20:07 +08:00
厉害~~ 学习学习~

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/179342

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX