分享
  1. 首页
  2. 文章

golang 制作通用爬虫框架

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

# 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

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

用户登录

没有账号?注册
(追記) (追記ここまで)

今日阅读排行

    加载中
(追記) (追記ここまで)

一周阅读排行

    加载中

关注我

  • 扫码关注领全套学习资料 关注微信公众号
  • 加入 QQ 群:
    • 192706294(已满)
    • 731990104(已满)
    • 798786647(已满)
    • 729884609(已满)
    • 977810755(已满)
    • 815126783(已满)
    • 812540095(已满)
    • 1006366459(已满)
    • 692541889

  • 关注微信公众号
  • 加入微信群:liuxiaoyan-s,备注入群
  • 也欢迎加入知识星球 Go粉丝们(免费)

给该专栏投稿 写篇新文章

每篇文章有总共有 5 次投稿机会

收入到我管理的专栏 新建专栏