golang 制作通用爬虫框架

ldaysjun · · 3036 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

# golang 制作通用爬虫框架 # 一、背景 ​ 自己之前是一个iOS的小工,后来又去后台搬砖。 ​ 一直准备做一个iOS优质文章的聚合,每天定向爬取大V们的博客。所以就萌生了尝试打造一个通用爬虫框架的想法。加上近期开始golang的学习,所以选择使用go来写。 ​ 各章内容总结的比较粗糙,有什么问题,欢迎交流,欢迎各位大佬来喷。 * 传送门:[julyT](https://github.com/ldaysjun/JulyT) * 介绍:[详细描述](https://xiaozhuanlan.com/topic/5407298316) ## 1.1 初识 ​ 我给它起名叫JulyT,目前0.1版本支持Xpath数据解析,批量任务并发。简单的规则编写。就可以完成定向数据的提取. 例如:实现抓取列表,再抓取列表页详情数据,接着翻页继续 ```go func rule(node *Xpath.Node,spider *JulySpider.Spider) { path := Xpath.MustCompile("//*[@id=\"archive-page\"]/section") it := path.Iter(node) for it.Next() { urlPath := Xpath.MustCompile("a/@href") url,_:= urlPath.String(it.Node()) // spider.RunNextStep("http://lastdays.cn"+url,analysisData) } fmt.Println("================一页数据==================") nextPath := Xpath.MustCompile("//*[@id=\"page-nav\"]/a[@class=\"extend next\"]/@href") if nextPath.Exists(node) { url,_ := nextPath.String(node) spider.RunNextStep("http://lastdays.cn"+url,rule) } } ``` ## 1.2 组件简介 ### 1.2.1 任务池 ​ 为每一个爬虫实例提供独立的运行空间。自动调度,自动回收空闲任务节点,任务节点复用。提供最底层的任务环境 ### 1.2.2 调度器 ​ 管理所有请求,实现请求优先级调度。过滤重复请求。 ### 1.2.3 下载器 ​ 提供高并发的HTML下载。 ### 1.2.4 引擎 ​ 处理数据流,控制各个模块之间的调度。监控所有请求流程 ### 1.2.5 spider ​ 爬虫实例,支持规则自定义。 ## 1.3 结构图 ![](https://diycode.b0.upaiyun.com/photo/2018/1860acb69242fd009bbc4478a9de3f08.png) ## 1.4 总结 ​ 有很多优秀的开源的爬虫框架。自己造这个轮子的目的也是希望得到一些锻炼,JulyT还有很多需要修正改进的地方,我会持续更新这个玩具。目前还缺少一个输出组件,自定义输出规则。会在0.2版本中体现出来。欢迎大家来喷。

有疑问加站长微信联系(非本文作者))

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

3036 次点击  ∙  1 赞  
加入收藏 微博
被以下专栏收入,发现更多相似内容
1 回复  |  直到 2019-07-24 18:46:32
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传