[![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)
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
【项目资源】: 包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。 包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】: 所有源码都经过严格测试,可以直接运行。 功能在确认正常工作后才上传。 【适用人群】: 适用于希望学习不同技术领域的小白或进阶学习者。 可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】: 项目具有较高的学习借鉴价值,也可直接拿来修改复刻。 对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】: 有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 鼓励下载和使用,并欢迎大家互相学习,共同进步。
资源推荐
资源详情
资源评论
收起资源包目录
golang实现的爬虫框架,使用者只需关心页面规则,提供web管理界面。基于colly开发。.zip (202个子文件)
.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
共 202 条
- 1
- 2
- 3
资源评论
妄北y
- 粉丝: 1w+
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- ASCII American Standard Code for Information Interchange
- 一个chm格式的 SQL 函数手册-SQL语言手册文档
- 计算当前月份的天数和剩余天数
- 基于ARM的指令调度和延迟分支
- 基于Vue和TypeScript的极简聊天应用设计源码 - HasChat
- 基于Vue2全家桶和Zcool数据的图片收集网站设计源码 - cool-picture
- 基于C和C++的二维绘制工具设计源码 - DrawPro
- Object.defineProperty 的 IE 补丁object-defineproperty-ie-master.zip
- 整卷预览.mhtml
- MySQL是一种广泛使用的开源关系型数据库管理系统,它提供了丰富的SQL语句用于数据库的创建、查询、更新和管理 以下是一些常见的
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功