[![GoDoc](https://godoc.org/github.com/nange/gospider?status.svg)](https://godoc.org/github.com/nange/gospider)
[![Build Status](https://travis-ci.com/nange/gospider.svg?branch=master)](https://travis-ci.org/nange/gospider)
[![Go Report Card](https://goreportcard.com/badge/github.com/nange/gospider)](https://goreportcard.com/report/github.com/nange/gospider)
[![codecov.io](https://codecov.io/github/nange/gospider/branch/master/graph/badge.svg)](https://codecov.io/github/nange/gospider)
[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fnange%2Fgospider.svg?type=shield)](https://app.fossa.com/projects/git%2Bgithub.com%2Fnange%2Fgospider?ref=badge_shield)
# gospider
golang实现的爬虫框架,使用者只需关心页面规则,提供web管理界面。基于[colly](https://github.com/gocolly/colly)开发。
## 当前状态
Alpha, 核心功能可用, 但功能还不完善。接口随时可能改变。
限制:
* 目前只能单机运行, 不能实现真正的分布式运行。 但大部分情况下, 如果你不是需要同时爬取成百上千个站点, 其实并不需要真正的分布式,
只需要一个代理IP池即可。
* 不能用于大文件下载
## 特性
* 使用者只需编写页面规则代码
* 提供WEB管理界面 (包括任务管理、系统管理等)
* 任务级别的可配置异步并发控制(请求延迟, 请求并发度)
* 自动cookie和session处理
* 支持各种导出类型(mysql,csv等)
* 支持定时任务(兼容crontab格式)
* 支持任务级别的可配置代理IP池
* Robots.txt 支持
## 依赖
MySQL
gospider可以配置一下相关环境变量:
GOSPIDER_DB_HOST、GOSPIDER_DB_PORT、GOSPIDER_DB_USER、GOSPIDER_DB_PASSWORD、GOSPIDER_DB_NAME、GOSPIDER_WEB_IP、GOSPIDER_WEB_PORT
本地开发环境: [安装](https://github.com/nange/gospider/wiki/Install)
## 使用方式
`_example` 目录提供了使用实例, rule目录里面包含了爬取规则, 编译成功后直接运行。在浏览器打开: http://localhost:8080/admin
以baidunews(百度新闻)为例简单说明爬虫规则如何编写:
```go
package baidunews
import (
"github.com/nange/gospider/spider"
log "github.com/sirupsen/logrus"
)
func init() {
spider.Register(rule) // 注册规则
}
var rule = &spider.TaskRule{
Name: "百度新闻规则", // 规则名称
Description: "抓取百度新闻各个分类的最新焦点新闻", // 规则描述
Namespace: "baidu_news", // 命名空间, 选择导出类型时有用, 比如导出类型为MySQL时, namespace相当于表明
OutputFields: []string{"category", "title", "link"}, // 导出字段
Rule: &spider.Rule{ // 规则详细定义
Head: func(ctx *spider.Context) error { // 规则就像是一个链表, head为头节点, 后续为node节点, head节点的处理应该足够简单, 比如定义入口链接, 处理登陆等
return ctx.VisitForNext("http://news.baidu.com")
},
Nodes: map[int]*spider.Node{ // nodes定义了一系列的实际业务的处理步骤, 一个复杂的业务可以被分为多个连续的子任务, key从0开始递增
0: step1, // 第一步: 获取所有分类
1: step2, // 第二步: 获取每个分类的新闻标题链接
},
},
}
var step1 = &spider.Node{
OnRequest: func(ctx *spider.Context, req *spider.Request) { // 实际请求发出之前执行
log.Println("Visting", req.URL.String())
},
OnHTML: map[string]func(*spider.Context, *spider.HTMLElement) error { // 返回结果是html时执行, map的key为页面选择器(和jquery的选择器语法相同)
`.menu-list a`: func(ctx *spider.Context, el *spider.HTMLElement) error { // 获取所有分类
category := el.Text
if category == "首页" {
category = "热点要闻"
}
ctx.PutReqContextValue("category", category) // 在请求的context中存储key,value值(通常用于需要传递参数到下一个处理流程时使用)
link := el.Attr("href")
return ctx.VisitForNextWithContext(link) // 定义下一个处理流程的入口, 并且保留context上下文
},
},
}
var step2 = &spider.Node{
OnRequest: func(ctx *spider.Context, req *spider.Request) {
log.Println("Visting", req.URL.String())
},
OnHTML: map[string]func(*spider.Context, *spider.HTMLElement) error {
`#col_focus a, .focal-news a, .auto-col-focus a, .l-common .fn-c a`: func(ctx *spider.Context, el *spider.HTMLElement) error {
title := el.Text
link := el.Attr("href")
if title == "" || link == "javascript:void(0);" {
return nil
}
category := ctx.GetReqContextValue("category") // 取出上一步context中存储的值
return ctx.Output(map[int]interface{}{ // 导出字段, key从0递增, 很上面的OutputFields内容需要一一对应
0: category,
1: title,
2: link,
})
},
},
}
```
完整的使用方式请参考`_example`目录。 运行成功后打开WEB界面效果:
![image](gospider-exportdb-list.png)
![image](gospider-task-create.png)
![image](gospider-task-list.png)
## 感谢
* [colly](https://github.com/gocolly/colly)
* [gin](https://github.com/gin-gonic/gin)
* [gorm](https://github.com/jinzhu/gorm)
## License
[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fnange%2Fgospider.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fnange%2Fgospider?ref=badge_large)
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
【资源说明】 基于colly开发golang实现的爬虫框架详细文档+资料齐全.zip 【备注】 1、该项目是个人高分项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!
资源推荐
资源详情
资源评论
收起资源包目录
基于colly开发golang实现的爬虫框架详细文档+资料齐全.zip (203个子文件)
.babelrc 234B
index.css 414KB
waves.css 825B
.editorconfig 147B
.eslintignore 34B
401.gif 160KB
.gitignore 360B
.gitignore 282B
a_router-packr.go 3.76MB
autogenerated_task.go 50KB
autogenerated_exportdb.go 18KB
autogenerated_user.go 17KB
context.go 8KB
auto_migrate.go 7KB
dianping.go 7KB
spider.go 7KB
moji_tianqi.go 6KB
spider_test.go 6KB
output.go 4KB
output_test.go 4KB
stackoverflow.go 4KB
update_task.go 4KB
task.go 4KB
auto_migrate_test.go 4KB
task_config.go 4KB
gospider.go 4KB
helper.go 3KB
colly.go 3KB
start_task.go 3KB
baidu_news.go 2KB
user.go 2KB
route.go 2KB
task_rule.go 2KB
restart_task.go 2KB
cron.go 2KB
db.go 2KB
errors.go 2KB
checktask.go 2KB
create_task.go 2KB
user_test.go 2KB
exportdb.go 2KB
enu.go 2KB
exportdb_test.go 1KB
stop_task.go 1KB
task_test.go 1KB
task_rule_test.go 1KB
db_test.go 1KB
get_rules.go 1KB
get_list.go 1002B
create.go 988B
get_task_by_id.go 936B
get_task_list.go 909B
task.go 904B
taskstatus.go 901B
db.go 894B
web.go 856B
delete.go 657B
model_test.go 600B
get_user_info.go 503B
main.go 501B
task_lock.go 477B
example_gospider_test.go 471B
lock_test.go 378B
task_test.go 363B
cron_test.go 272B
types.go 164B
index.html 415B
favicon.ico 66KB
index.js 7KB
webpack.prod.conf.js 6KB
.eslintrc.js 5KB
index.js 3KB
user.js 3KB
index.js 3KB
webpack.dev.conf.js 3KB
webpack.base.conf.js 3KB
utils.js 3KB
permission.js 3KB
sticky.js 2KB
request.js 2KB
tagsView.js 2KB
zh.js 2KB
en.js 2KB
build.js 2KB
waves.js 2KB
permission.js 1KB
check-versions.js 1KB
app.js 1KB
validate.js 1KB
index.js 1KB
task.js 1KB
openWindow.js 1KB
ResizeHandler.js 976B
main.js 850B
index.js 790B
clipboard.js 745B
getters.js 689B
permission.js 604B
permission.js 562B
errorLog.js 544B
共 203 条
- 1
- 2
- 3
资源评论
Yuki-^_^
- 粉丝: 3099
- 资源: 925
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Python实现基于一维卷积神经网络(1D-CNN)的多元时间序列分类源码+文档说明
- java基于springBoot课程评价系统源码数据库 MySQL源码类型 WebForm
- 5G工业无线路由器说明书
- SunshineLife个人博客是基于django+mysql+layui的小型个人博客网站
- 5G终端拔号脚本(AT), 适用于MT5701
- 基于Python + Django的生鲜超市系统 调用alipay沙盒系统支付
- 登山比赛乘车安排表.xlsx
- 面试题记录11111111111111
- java基于springMVC的云音乐网站源码数据库 MySQL源码类型 WebForm
- MiniCADSee-X64(CAD看图软件)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功