最进在用golang开发的一个分布式的爬虫
github:https://github.com/wcong/ants-go
一直用scrapy抓数据。scrapy的分布式部署,需要人⼯分配抓取链接,感觉很麻烦,一直想搞一个自动分发请求的分布式爬虫。
基于scrapy改了一简陋的分布式爬虫ants,但是动态语言写起来有些混乱,正好正在学go,就用go写了一个分布式爬虫ants-go
爬虫架构参考是scrapy,分布式的架构参考的是elasticsearch.
目前已经可以试用,欢迎大家来拍砖.
1
coosir 2015-03-25 22:01:58 +08:00 1
各个node执行完将结果发[挥]master
|
3
qiang1012 2015-03-25 22:22:16 +08:00 via iPad 1
正好要学go语言,star之!
|
4
Tink 2015-03-26 00:40:31 +08:00 via iPhone
这个看起来很厉害啊
|
5
ericls 2015-03-26 06:53:56 +08:00 via Android
很厉害 虽然不懂go
|
6
xiaoyaoking 2015-03-26 07:39:07 +08:00 via Android
搞这么多专业名词瞬间感觉自己啥都不懂了。。。
|
7
qloog 2015-03-26 13:41:16 +08:00
都开始自己写 分布式爬虫了,赞~~
scrapy 还不太懂的路过吧。。 |
8
kevinroot 2015-03-27 23:23:46 +08:00
聪神威武~~~
|
10
monnand 2015-03-30 09:32:08 +08:00 1
还没有看代码,但是从代码组织上看,不太符合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安装。 |
12
wcong OP @monnand 我考虑了一下,因为这不是一个传统的第三方库的项目,是一个完整的应用程序,需要依赖外部的conf,log等目录,所以把src/的代码都放到根目录下,有点不太合理
|
13
monnand 2015-03-30 12:15:00 +08:00 1
@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 |
14
monnand 2015-03-30 12:31:42 +08:00 1
@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的项目)。 |
16
hustlzp 2015-03-30 18:19:00 +08:00
收藏了
|
17
monnand 2015-03-30 18:39:09 +08:00 via Android 2
@wcong 不客气。和其他语言一样,Go语言有自己的一套独立的规范。个人觉得现在的官方文档把内容放得太分散,导致初学者必须把几份文档合在一起看。最好的办法还是看看官方的实际项目,这样有助于了解这个语言和相应工具的使用
|
18
wcong OP 已经参照的规范改过来了
|
20
jusonalien 2016-02-19 23:20:07 +08:00
厉害~~ 学习学习~
|
21
tweety 2017-08-31 10:23:48 +08:00
建个群大家交流下
|
22
tweety 2017-12-13 10:52:24 +08:00
根据跑不起来
|