golang 制作通用爬虫框架

ldaysjun · 2018-10-10 22:06:34 · 3138 次点击 · 预计阅读时间 2 分钟 · 大约8小时之前 开始浏览    
这是一个创建于 2018-10-10 22:06:34 的文章,其中的信息可能已经有所发展或是发生改变。

golang 制作通用爬虫框架

一、背景

​ 自己之前是一个iOS的小工,后来又去后台搬砖。

​ 一直准备做一个iOS优质文章的聚合,每天定向爬取大V们的博客。所以就萌生了尝试打造一个通用爬虫框架的想法。加上近期开始golang的学习,所以选择使用go来写。

​ 各章内容总结的比较粗糙,有什么问题,欢迎交流,欢迎各位大佬来喷。

1.1 初识

​ 我给它起名叫JulyT,目前0.1版本支持Xpath数据解析,批量任务并发。简单的规则编写。就可以完成定向数据的提取.

例如:实现抓取列表,再抓取列表页详情数据,接着翻页继续

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 结构图

1.4 总结

​ 有很多优秀的开源的爬虫框架。自己造这个轮子的目的也是希望得到一些锻炼,JulyT还有很多需要修正改进的地方,我会持续更新这个玩具。目前还缺少一个输出组件,自定义输出规则。会在0.2版本中体现出来。欢迎大家来喷。


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

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

3138 次点击  ∙  1 赞  
加入收藏 微博
被以下专栏收入,发现更多相似内容
1 回复  |  直到 2019-07-24 18:46:32
LiuRonBing
LiuRonBing · #1 · 6年之前

大佬,可有源代码

添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传