Spider-Man是一款基于Go实现的小型爬虫框架,支持从一个给定URL开始,递归爬取页面内容。
Tips:
目前Spider-Man已经和 Spider-Engine(一个Go的小型搜索引擎)打通,支持爬取内容灌入搜索引擎进一步分析。。
并且由 Spider-Face(一个Go的web框架项目)配了一套简单的搜索引擎页面。
当然,这并非必须的,您也可以将爬取的数据导入您熟悉的SE比如ElasticSearch,并选择自己熟悉的web框架。
-
- 利用了Go的高并发的特性, 高效控制单机的爬取并发度
-
- 框架式的插件设计,用户只需要实现接口,即可自己定义Dom元素的分析逻辑
-
- 框架式的插件设计,用户只需要实现接口,即可自己定义分析结果的处理逻辑,比如导入搜索引擎或者其他存储
-
- 支持实时查看爬虫状态统计
- go get github.com/hq-cml/spider-man
- cd 项目目录
- go build ./
目前提供了两个插件Demo:
- baseSpider:支持比较简单的关键字匹配功能, 比如从360主站https://www.360.cn 开始搜索,打印出全部包含"老周"的网页
运行:
./spider-man -c "conf/spider.conf" -f "https://www.360.cn" -u "老周"
./spider-man -c "conf/spider.conf" -f 'http://www.sohu.com' -u "张朝阳"
- engineSpider:实现了和搜索引擎Spider-Engine打通,爬取到的结果直接导入搜索引擎。
这个插件实现了360新闻页面的Dom分析,并将分析结果结构化成json,导入SE。
运行:
./spider-man -c "conf/spider.conf" -p engine -f 'http://www.360.cn/news.html' -u '127.0.0.1:9528'
curl http://ip:8080/runInfo
- basic:基本数据类型定义
- conf:配置文件
- helper:业务无关的工具
- logic: 核心业务代码
- middleware: 中间件
- plugin: 爬虫逻辑插件
- vendor: 依赖
说明
- 调度器负责全局各个模块的调度, 核心工作是将请求从缓存中运送到请求Channel
- downloader负责下载工作,产出是Response,下载并发度通过downloader池子来控制
- analyzer负责分析工作,输入Response,产出是新的Request和Item项
- processor负责最终Item的处理
- 其中analyzer和processor的行为支持用户通过插件的形式定制
- 中间件主要负责各个模块之间的缓冲
- 爬虫插件的逻辑丰富,能够自适应更多的页面Dom风格
- Cookie等带登陆的功能
- 分布式爬虫
- 防封禁