Go爬虫框架 go_spider

MPL
Google Go
跨平台
2014-12-01
hucong

 

image

本项目基于golang开发,是一个开放的垂直领域的爬虫框架,框架中将各个功能模块区分开,方便使用者重新实现子模块,进而构建自己垂直方方向的爬虫。

本项目将爬虫的各个功能流程区分成Spider模块(主控),Downloader模块(下载器),PageProcesser模块(页面分析),Scheduler模块(任务队列),Pipeline模块(结果输出);

执行过程简述

  1. Spider模块从Scheduler模块中获取包含待抓取url的Request对象,启动一个协程,一个协程执行一次爬取过程,此处我们把协程也看成Spider,Spider把Request对象传入Downloader,Downloader下载该Request对象中url所对应的页面或者其他类型的数据,生成Page对象;
  2. Spider调用PageProcesser模块解析Page对象中的页面数据,并存入Page对象中的PageItems中(以Key-Value对的形式保存),同时存入解析结果中的待抓取链接,Spider会将待抓取链接存入Scheduler模块中的Request队列中;
  3. Spider调用Pipeline模块输出Page中的PageItems的结果;
  4. 执行步骤1,直至Scheduler中所有链接被处理完成,则Spider被挂起等待下一个待抓取链接或者终止。

image

执行过程相应的Spider核心代码,代码代表一次爬取过程:

// core processer func (this *Spider) pageProcess(req *request.Request) { // Get Page p := this.pDownloader.Download(req) if p == nil { return } // Parse Page this.pPageProcesser.Process(p) for _, req := range p.GetTargetRequests() {
        this.addRequest(req)
    } // Output if !p.GetSkip() { for _, pip := range this.pPiplelines {
            pip.Process(p.GetPageItems(), this)
        }
    }

    this.sleep()
}

项目安装与示例执行

  • 安装本包和依赖包
go get github.com/hu17889/go_spider
go get github.com/PuerkitoBio/goquery
go get github.com/bitly/go-simplejson

示例执行:

  • 编译:go install github.com/hu17889/go_spider/example/github_repo_page_processor
  • 执行:./bin/github_repo_page_processor

展示一个简单爬虫示例

示例的功能是爬取https://github.com/hu17889?tab=repositories下面的项目以及项目详情页的相关信息,并将内容输出到标准输出。

一般在自己的爬虫main包中需要实现爬虫创建,初始化,以及PageProcesser模块的继承实现。可以实现自己的子模块或者使用项目中已经存在的子模块,通过Spider对象中相应的Set或者Add函数将模块引入爬虫。本项目支持链式调用

spider.NewSpider(NewMyPageProcesser(), "TaskName"). // 创建PageProcesser和Spider,设置任务名称 AddUrl("https://github.com/hu17889?tab=repositories", "html"). // 加入初始爬取链接,需要设置爬取结果类型,方便找到相应的解析器 AddPipeline(pipeline.NewPipelineConsole()). // 引入PipelineConsole输入结果到标准输出 SetThreadnum(3). // 设置爬取参数:并发个数 Run() // 开始执行
加载中

评论(0)

暂无评论

暂无资讯

暂无问答

Scrapy -- 04

今天总算给老板完成了抓取任务。差点让允许域名和编码坑死。前面只是简单翻了一下官方的tutorial,然后今天就发现了:http://scrapy-chs.readthedocs.org/zh_CN/0.24/intro/overview.html。台...

2014/10/07 00:17
440
0
Scrapy 1.5.0之命令行

配置参数 系统层面: E:\Python 3.6.2\Lib\site-packages\scrapy\templates\project, 用户层面:~/.config/scrapy.cfg ($XDG_CONFIG_HOME) 及 ~/.scrapy.cfg ($HOME) 作全局设置 项目定义: ...

2018/06/11 14:46
88
0
解决 Scrapy-Redis 空跑问题,链接跑完后自动关闭爬虫

scrapy-redis框架中,reids存储的xxx:requests已经爬取完毕,但程序仍然一直运行,如何自动停止程序,结束空跑。相信大家都很头疼,尤其是网上一堆搬来搬去的帖子,来看一下 我是如何解决这个...

2018/03/07 16:16
2.8K
0
Scrapy中间件(Middleware)

Spider中间件(Middleware) Spider中间件是介入到Scrapy的spider处理机制的钩子框架,您可以添加代码来处理发送给 Spiders的response及spider产生的item和request。 激活spider中间件 要启用s...

2016/09/22 21:20
147
0
9.3-Scrapy框架爬虫【进阶】-Item Pipelines用法

Scrapy提供了Item类。 Item对象是种简单的容器(类似于字典(dict,键值对)),保存爬取到得数据。 1、声明Item Item使用简单的class定义语法和Filed对象来申明,例如: from scrapy import...

08/15 16:39
22
0
Scrapy 1.5.0之Spider

爬虫原理 创建一个以百度为名的爬虫,其中spiders/baidu.py内容如下: # -*- coding: utf-8 -*- import scrapy class BaiduSpider(scrapy.Spider): name = 'baidu' allowed_domains = ['www...

2018/06/12 21:41
91
0
命令行工具(Command line tools)

默认的Scrapy项目结构 在开始对命令行工具以及子命令的探索前,让我们首先了解一下Scrapy的项目的目录结构。 虽然可以被修改,但所有的Scrapy项目默认有类似于下边的文件结构: scrapy.cfg my...

2016/03/29 22:45
154
1

没有更多内容

加载失败,请刷新页面

返回顶部
顶部