Go 爬虫软件 Pholcus

Go 爬虫软件 Pholcus

Apache
Google Go
跨平台
2015-06-22
bear256

 

Pholcus 

Pholcus(幽灵蛛)是一款纯Go语言编写的支持分布式的高并发、重量级爬虫软件,定位于互联网数据采集,为具备一定Go或JS编程基础的人提供一个只需关注规则定制的功能强大的爬虫工具。

它支持单机、服务端、客户端三种运行模式,拥有Web、GUI、命令行三种操作界面;规则简单灵活、批量任务并发、输出方式丰富(mysql/mongodb/csv/excel等)、有大量Demo共享;另外它还支持横纵向两种抓取模式,支持模拟登录和任务暂停、取消等一系列高级功能。

  •  

    GoDoc

  •  GitHub release

  •  官方QQ群:Go大数据 42731170 Go大数据群

爬虫原理

image

 

image

 

image

框架特点

  1. 为具备一定Go或JS编程基础的用户提供只需关注规则定制、功能完备的重量级爬虫工具;

  2. 支持单机、服务端、客户端三种运行模式;

  3. GUI(Windows)、Web、Cmd 三种操作界面,可通过参数控制打开方式;

  4. 支持状态控制,如暂停、恢复、停止等;

  5. 可控制采集量;

  6. 可控制并发协程数;

  7. 支持多采集任务并发执行;

  8. 支持代理IP列表,可控制更换频率;

  9. 支持采集过程随机停歇,模拟人工行为;

  10. 根据规则需求,提供自定义配置输入接口

  11. 有mysql、mongodb、csv、excel、原文件下载共五种输出方式;

  12. 支持分批输出,且每批数量可控;

  13. 支持静态Go和动态JS两种采集规则,支持横纵向两种抓取模式,且有大量Demo;

  14. 持久化成功记录,便于自动去重;

  15. 序列化失败请求,支持反序列化自动重载处理;

  16. 采用surfer高并发下载器,支持 GET/POST/HEAD 方法及 http/https 协议,同时支持固定UserAgent自动保存cookie与随机大量UserAgent禁用cookie两种模式,高度模拟浏览器行为,可实现模拟登录等功能;

  17. 服务器/客户端模式采用Teleport高并发SocketAPI框架,全双工长连接通信,内部数据传输格式为JSON。

 

下载安装

  1. 下载第三方依赖包源码,放至 GOPATH/src 目录下 [点击下载 ZIP]

  2. 下载更新源码,命令行如下

go get -u -v github.com/henrylee2cn/pholcus

备注:Pholcus公开维护的spider规则库地址 https://github.com/henrylee2cn/pholcus_lib

 

创建项目

package main

import (
    "github.com/henrylee2cn/pholcus/exec"
    _ "github.com/henrylee2cn/pholcus_lib" // 此为公开维护的spider规则库
    // _ "pholcus_lib_pte" // 同样你也可以自由添加自己的规则库
)

func main() {
    // 设置运行时默认操作界面,并开始运行
    // 运行软件前,可设置 -a_ui 参数为"web"、"gui"或"cmd",指定本次运行的操作界面
    // 其中"gui"仅支持Windows系统
    exec.DefaultRun("web")
}

 

编译运行

正常编译方法

cd {{replace your gopath}}/src/github.com/henrylee2cn/pholcus
go install 或者 go build

Windows下隐藏cmd窗口的编译方法

cd {{replace your gopath}}/src/github.com/henrylee2cn/pholcus
go install -ldflags="-H windowsgui" 或者 go build -ldflags="-H windowsgui"

查看可选参数:

pholcus -h

image

 

Web版操作界面截图如下:

image

 

GUI版操作界面之模式选择界面截图如下

image

 

Cmd版运行参数设置示例如下

$ pholcus -_ui=cmd -a_mode=0 -c_spider=3,8 -a_outtype=csv -a_thread=20 -a_dockercap=5000 -a_pause=300
-a_proxyminute=0 -a_keyins="" -a_limit=10 -a_success=true -a_failure=true

 

运行时目录文件

├─pholcus 软件
│
├─pholcus_pkg 运行时文件目录
│  ├─config.ini 配置文件
│  │
│  ├─proxy.lib 代理IP列表文件
│  │
│  ├─spiders 动态规则目录
│  │  └─xxx.pholcus.html 动态规则文件
│  │
│  ├─phantomjs 程序文件
│  │
│  ├─text_out 文本数据文件输出目录
│  │
│  ├─file_out 文件结果输出目录
│  │
│  ├─logs 日志目录
│  │
│  ├─history 历史记录目录
│  │
└─└─cache 临时缓存目录

 

动态规则示例

特点:动态加载规则,无需重新编译软件,书写简单,添加自由,适用于轻量级的采集项目。
xxx.pholcus.html


    HTML动态规则示例
    HTML动态规则示例 [Auto Page] [http://xxx.xxx.xxx]
    300
    false
    true
    false
    false
    
        
    
    
        
    
    
        
    
    
        
            
        
        
            
        
    
    
        
            
        
    
    
        
            
        
    

静态规则示例

特点:随软件一同编译,定制性更强,效率更高,适用于重量级的采集项目。
xxx.go

func init() {
    Spider{
        Name:        "静态规则示例",
        Description: "静态规则示例 [Auto Page] [http://xxx.xxx.xxx]",
        // Pausetime: 300,
        // Limit:   LIMIT,
        // Keyin:   KEYIN,
        EnableCookie:    true,
        NotDefaultField: false,
        Namespace:       nil,
        SubNamespace:    nil,
        RuleTree: &RuleTree{
            Root: func(ctx *Context) {
                ctx.AddQueue(&request.Request{Url: "http://xxx.xxx.xxx", Rule: "登录页"})
            },
            Trunk: map[string]*Rule{
                "登录页": {
                    ParseFunc: func(ctx *Context) {
                        ctx.AddQueue(&request.Request{
                            Url:      "http://xxx.xxx.xxx",
                            Rule:     "登录后",
                            Method:   "POST",
                            PostData: "username=123456@qq.com&password=123456&login_btn=login_btn&submit=login_btn",
                        })
                    },
                },
                "登录后": {
                    ParseFunc: func(ctx *Context) {
                        ctx.Output(map[string]interface{}{
                            "全部": ctx.GetText(),
                        })
                        ctx.AddQueue(&request.Request{
                            Url:    "http://accounts.xxx.xxx/member",
                            Rule:   "个人中心",
                            Header: http.Header{"Referer": []string{ctx.GetUrl()}},
                        })
                    },
                },
                "个人中心": {
                    ParseFunc: func(ctx *Context) {
                        ctx.Output(map[string]interface{}{
                            "全部": ctx.GetText(),
                        })
                    },
                },
            },
        },
    }.Register()
}

 

FAQ

请求队列中,重复的URL是否会自动去重?

url默认情况下是去重的,但是可以通过设置Request.Reloadable=true忽略重复。

URL指向的页面内容若有更新,框架是否有判断的机制?

url页面内容的更新,框架无法直接支持判断,但是用户可以自己在规则中自定义支持。

请求成功是依据web头的状态码判断?

不是判断状态,而是判断服务器有无响应流返回。即,404页面同样属于成功。

请求失败后的重新请求机制?

每个url尝试下载指定次数之后,若依然失败,则将该请求追加到一个类似defer性质的特殊队列中。  
在当前任务正常结束后,将自动添加至下载队列,再次进行下载。如果依然有没下载成功的,则保存至失败历史记录。  
当下次执行该条爬虫规则时,可通过选择继承历史失败记录,把这些失败请求自动加入defer性质的特殊队列……(后面是重复步骤)

 

贡献者名单

贡献者 贡献内容
henrylee2cn 软件作者
kas surfer下载器中phantomjs内核
wang898jian 参与完全手册编写

 

第三方依赖包

go get github.com/henrylee2cn/pholcus_lib
go get github.com/henrylee2cn/teleport
go get github.com/PuerkitoBio/goquery
go get github.com/robertkrimen/otto
go get github.com/andybalholm/cascadia
go get github.com/lxn/walk
go get github.com/lxn/win
go get github.com/go-sql-driver/mysql
go get github.com/jteeuwen/go-bindata/...
go get github.com/elazarl/go-bindata-assetfs/...
go get gopkg.in/mgo.v2
<以下需翻墙下载>
go get golang.org/x/net/html
go get golang.org/x/text/encoding
go get golang.org/x/text/transform

(在此感谢以上开源项目的支持!)

 

开源协议

Pholcus(幽灵蛛)项目采用商业应用友好的Apache License v2.发布

 

加载中

评论(17)

天佑我儿
如果是有账号密码的私密代理怎么用啊?? 我在源代码里面找不到可用私密代理的方法
懒神
懒神
单机用还可以,其他有待优化。
青苗
青苗
满分
数据抓取
数据抓取
寻找一个小团队做新闻客户端数据抓取,感兴趣可微信联系zx_wander
Iasked
Iasked
我有只蜈蚣,怎样捉蜘蛛? #Pholcus#
深爱着你们
深爱着你们
想试用一下,不过一直安装不成功,可惜了 #Pholcus#
jobell
jobell
@henrylee2cn 每次添加或者修改规则都需要重新编译吗?? #Pholcus#
henrylee2cn
henrylee2cn
GUI与业务逻辑是完全分离的,你可以任意更换为其他界面甚至是命令行 #Pholcus#
做个坏人
做个坏人
说好的大量demo呢 ?找不到! #Pholcus#
taohe
taohe
只有win界面怎么用 #Pholcus#

Pholcus 1.2 发布,高并发、分布式爬虫软件

Pholcus爬虫软件发布1.2版本,CPU使用率与内存占用均有大幅降低,运行更加稳定流畅。同时新增kafka输出方式,加快任务终止速度(秒级延时)。 Pholcus v1.2 具体更新细节如下: 一、输出功能...

2016/09/25 23:36

Pholcus(幽灵蛛)爬虫软件 v1.0 稳定版正式发布

自2015年5月 Pholcus 发布第一个版本起历经一年的版本迭代,今日 v1.0 稳定版本终于正式发布了。在此感谢所有关注过Pholcus、反馈过开发建议以及运行bug的朋友们。v1.0 版本是一个经过诸多用...

2016/06/16 14:40

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

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

2016/03/23 09:30

Pholcus 爬虫 v0.8.2,性能提升 20% 以上

Pholcus(幽灵蛛)是一款纯Go语言编写的高并发、分布式、重量级爬虫软件,支持单机、服务端、客户端三种运行模式,拥有Web、GUI、命令行三种操作界面;规则简单灵活、批量任务并发、输出方式...

2016/03/03 20:09

Pholcus 爬虫 v0.8.0,支持 HTML 风格动态规则

近日,Pholcus 升级 v0.8.0 版本了,最大的亮点就是:终于突破规则需要静态编译的局制,增加支持HTML风格的动态规则。以后交流分享规则变得更加方便,随之而来将会是愈加完善的生态圈。 以下...

2016/01/20 10:46

Pholcus 0.7.5 发布,Go 爬虫软件

Pholcus 0.7.5 发布,更新如下: 大量功能优化: 一、规则模块更新: 1. 封装Spider与Response为上下文Context,大大简化规则语法; 2. 支持从Context获取上一次Request,并可在修改后作为新...

2015/12/03 07:41

Pholcus 0.7.4 发布,Go 爬虫软件

Pholcus 0.7.4 发布,更新如下: Spider中添加Namespace func(*Spider) string与SubNamespace func(self *Spider, dataCell map[string]interface{}) string两个字段,实现自定义数据库、表单...

2015/11/11 07:55

Pholcus 0.7.3 发布,Go 爬虫软件

Pholcus 0.7.3 发布,更新内容如下: 全面升级 一、界面升级: 1. Windows下编译时自动添加图标 2. web及cmd版的命令行窗口添加软件名称 二、下载器相关升级: 1. 初步增加PhantomJS下载器,...

2015/10/21 07:58

Pholcus 0.6.1 发布,Go 爬虫软件

Pholcus 0.6.1 发布,更新内容如下: 调整spider结构体,规范命名,精简方法; 拓展Teleport Socket API; 新增大量采集规则实例; 解放规则库,用户可以自由指定规则库; 不再直接提供main包...

2015/08/20 09:34

Pholcus 0.6.0 发布,Go 爬虫软件

Pholcus 0.6.0 发布,更新内容如下: 新增web操作界面(已支持web/gui/command三种界面); 支持运行模式热切换。 下载器支持固定UserAgent,自动保存cookie模式; 下载器支持随机大量常用U...

2015/08/12 08:06

没有更多内容

加载失败,请刷新页面

1
回答
怎么使用pholcus

@henrylee2cn 你好,想跟你请教个问题:请问老师,这个到底怎么用啊?

2016/06/20 13:34
2
回答
如何用google地图收集历年来全国各县政府地址

@henrylee2cn 你好,想跟你请教个问题: 请问我可以用这个爬虫程序在google地图上批量搜集历年来的全国各个县的人民政府的地址吗?由于政府可能...

2016/04/25 16:59

没有更多内容

加载失败,请刷新页面

没有更多内容

[Pholcus爬虫] 实现一个简单的下载文件的动态规则

Pholcus爬虫的动态规则使用 .pholcus.html 作为规则文件后缀,默认放在当前目录的 ./pholcus_pkg/spiders 文件夹中。用户可以在配置文件 ./pholcus_pkg/config.ini 中通过修改“spiderdir”字...

2016/09/02 10:44
492
2
Go 爬虫软件 Pholcus

Pholcus Pholcus(幽灵蛛)是一款纯Go语言编写的支持分布式的高并发、重量级爬虫软件,定位于互联网数据采集,为具备一定Go或JS编程基础的人提供一个只需关注规则定制的功能强大的爬虫工具。...

2016/11/22 10:47
207
0
[Pholcus爬虫] 应对网站反爬虫的多项策略

Pholcus如何应对网站反爬虫策略?

2016/09/02 23:19
283
0
基于golang的爬虫实战

Go语言实现的小型爬虫,基于selenium实现,功能比较简单,新人练手用,轻喷~

04/20 14:33
2.7K
0
Google Go 语言从入门到应用必备开源项目

Go 语言于 2009 年 11 月正式宣布推出,成为开放源代码项目,发展至今已经具有越来越广泛的影响力,今年更是在 TIOBE 编程语言排行榜中跻身 20 强。很多开发者也逐渐将目光投向这门语言,本文...

2016/12/12 13:05
8.4K
22
2016年度开源中国最受欢迎开源软件参展合集

记录这些主要是方便后期阅读开源项目的时候方便查找:http://www.oschina.net/project/top_cn_2016 afinal Afinal简介 Afinal 是一个android的sqlite orm 和 ioc 框架。同时封装了android中的...

2016/12/21 19:17
389
0

没有更多内容

加载失败,请刷新页面

没有更多内容

返回顶部
顶部