golang实现并发爬虫一(单任务版本爬虫功能)
目的是写一个golang并发爬虫版本的演化过程。
那么在演化之前,当然是先跑通一下单任务版本的架构。
正如人走路之前是一定要学会爬走一般。
首先看一下单任务版本的爬虫架构,如下:

这是单任务版本爬虫的一个架构:
第一步是将seed送到engine里去。
第二步是将seed里的url给到fetcher,fetcher会从网络上获取文本内容。
第三步是将获取下来的文本内容给到parser,parser会根据一定的转换规则获取到request和需要打印或者存储的item给到engine里。
其中parser返回的request会继续给到engine里维护的一个队列中去,只要request有值就会一直去fethcer和parser。
另外这里的fetcher和parser因为fetcher的返回值是parse的传入参数值,所以这里其实可以合并成一个模块,比如一个叫worker的模块。
后面升级的架构就只有worker模块,fetcher和parser则只是worker模块里的实现模块了。
目前,此版本架构的缺点:
1.没有很好的利用golang的channel,engine里一直是处于单任务的状态。尤其是fetcher模块,这里获取网络里的内容会格外的需要时间一些。
此单任务版本可有源码?
有,地址如下:
https://github.com/anmutu/du_crawler/tree/master/02crawler
这个版本还是蛮好懂的。这里注明了,大概的一个流程。想了解详细还是看源码的好。
golang实现并发爬虫一(单任务版本爬虫功能)的更多相关文章
- golang实现并发爬虫三(用队列调度器实现)
		
欲看此文,必先可先看: golang实现并发爬虫一(单任务版本爬虫功能) gollang实现并发爬虫二(简单调度器) 上文中的用简单的调度器实现了并发爬虫. 并且,也提到了这种并发爬虫的实现可以提高爬 ...
 - golang实现并发爬虫二(简单调度器)
		
上篇文章当中实现了单任务版爬虫. 那么这篇文章就大概说下,如何在上一个版本中进行升级改造,使之成为一个多任务版本的爬虫.加快我们爬取的速度. 话不多说,先看图: 其实呢,实现方法就是加了一个sched ...
 - go单任务版爬虫
		
go单任务版爬虫(爬取珍爱网) 爬虫总体算法 单任务版爬虫架构 任务 获取并打印所在城市第一页用户的详细信息 代码实现 /crawler/main.go package main import ( & ...
 - python3编写网络爬虫23-分布式爬虫
		
一.分布式爬虫 前面我们了解Scrapy爬虫框架的基本用法 这些框架都是在同一台主机运行的 爬取效率有限 如果多台主机协同爬取 爬取效率必然成倍增长这就是分布式爬虫的优势 1. 分布式爬虫基本原理 1 ...
 - python爬虫-基础入门-python爬虫突破封锁
		
python爬虫-基础入门-python爬虫突破封锁 >> 相关概念 >> request概念:是从客户端向服务器发出请求,包括用户提交的信息及客户端的一些信息.客户端可通过H ...
 - 月薪45K的Python爬虫工程师告诉你爬虫应该怎么学,太详细了!
		
想用Python做爬虫,而你却还不会Python的话,那么这些入门基础知识必不可少.很多小伙伴,特别是在学校的学生,接触到爬虫之后就感觉这个好厉害的样子,我要学.但是却完全不知道从何开始,很迷茫,学的 ...
 - 【Python3爬虫】学习分布式爬虫第一步--Redis分布式爬虫初体验
		
一.写在前面 之前写的爬虫都是单机爬虫,还没有尝试过分布式爬虫,这次就是一个分布式爬虫的初体验.所谓分布式爬虫,就是要用多台电脑同时爬取数据,相比于单机爬虫,分布式爬虫的爬取速度更快,也能更好地应对I ...
 - 爬虫部署  --- scrapyd部署爬虫 + Gerapy 管理界面  scrapyd+gerapy部署流程
		
---------scrapyd部署爬虫---------------1.编写爬虫2.部署环境pip install scrapyd pip install scrapyd-client 启动scra ...
 - 【收藏】收集的各种Python爬虫、暗网爬虫、豆瓣爬虫、抖音爬虫 Github1万+星
		
收集的各种Python爬虫.暗网爬虫.豆瓣爬虫 Github 1万+星 磁力搜索网站2020/01/07更新 https://www.cnblogs.com/cilisousuo/p/1209954 ...
 
随机推荐
- BUAA_2020_OO_第一单元总结
			
三次作业,三次成长 第一次作业--幂函数求导总结 作业思路和心得 第一次作业的要求只有x的指数这样的幂函数加减组成表达式,对表达式进行求导,而且没有格式错误的检查,所以难度感觉还不是很高.不过由于我寒 ...
 - zookeeper java代码实现master 选举
			
1,master选举使用场景及结构 现在很多时候我们的服务需要7*24小时工作,假如一台机器挂了,我们希望能有其它机器顶替它继续工作.此类问题现在多采用master-salve模式,也就是常说的主从模 ...
 - 将Python执行代码打包成exe可执行文件
			
安装pyinstaller pip3 install pyinstaller 进入py文件目录,执行以下指令 pyinstaller -F -w <文件名.py>,-F代表生成可执行文件, ...
 - ConcurrentHashMap1.7和1.8的源码分析比较
			
ConcurrentHashMap 在多线程环境下,使用HashMap进行put操作时存在丢失数据的情况,为了避免这种bug的隐患,强烈建议使用ConcurrentHashMap代替HashMap,为 ...
 - MATLAB GUI设计(1)
			
一.新建GUI 1.命令行窗口输入 guide会出来如下界面,可以新建空白GUI,也可以打开已有GUI 2.通过工具栏新建 二.数据传递例子 1.添加输入框按钮,设置尺寸大小,内容,格式,标签 2.复 ...
 - 微信小程序生成带参数的二维码(小程序码)独家asp.net的服务端c#完整代码
			
一)我先用的小程序端的wx.request去调用API,发现竟然是一个坑! wx.request({ url: 'https://api.weixin.qq.com/wxa/getwxacodeunl ...
 - # CodeCraft-20 (Div. 2)
			
CodeCraft-20 (Div. 2) A. Grade Allocation 思路 : 无脑水题 代码 #include<iostream> #include<algorith ...
 - Nginx 是如何处理 HTTP 头部的?
			
Nginx 处理 HTTP 头部的过程 Nginx 在处理 HTTP 请求之前,首先需要 Nginx 的框架先和客户端建立好连接,然后接收用户发来的 HTTP 的请求行,比如方法.URL 等,然后接收 ...
 - java文件中出现最多的前n个单词
			
将文件打开,之后每读入一次,最后按空格进行分割.存入到map里面之后进行相应的比较输出操作.并将相应的内容输出到文件里面. package com.keshangone; //将想要输出的数据写入新的 ...
 - P4015 运输问题【zkw费用流】
			
输入输出样例 输入 #1复制 2 3 220 280 170 120 210 77 39 105 150 186 122 输出 #1复制 48500 69140zuixiaofeiyo 说明/提示 1 ...