32、存储引擎:数据清洗与存储

你好,我是郑建勋。 爬虫项目的一个重要的环节就是把最终的数据持久化存储起来,数据可能会被存储到MySQL、MongoDB、Kafka、Excel等多种数据库、中间件或者是文件中。 要达到这个目的,我们很容易想到使用接口来实现模块间的解耦。我们还要解决...

Go进阶-分布式爬虫实战

31、规则引擎:自定义爬虫处理规则

你好,我是郑建勋。 这一节课,我们重点来看看如何更合理地设置爬虫任务规则。之前,我们在查找租房信息时,已经实现了有一定扩展性的程序。通过在每一个请求中加入 ParseFunc 函数,可以实现灵活的请求规则。 12345678910// 单个请求typ...

Go进阶-分布式爬虫实战

30、辅助任务管理:任务优先级、去重与失败处理

你好,我是郑建勋。 这节课,让我们给系统加入一些辅助功能,把爬虫流程变得更完善一些。这些功能包括:爬虫最大深度、请求不重复、优先队列、以及随机的User-Agent。 设置爬虫最大深度当我们用深度和广度优先搜索爬取一个网站时,为了防止访问陷入到死循环...

Go进阶-分布式爬虫实战

29、细节决定成败:切片与哈希表的陷阱与原理

你好,我是郑建勋。 这节课,让我们来看一看切片与哈希表的原理。 我想先考你两道面试题。下面的代码中,foo与bar最后的值是什么? 12345foo := []int{0,0,0,42,100}bar := foo[1:4]bar...

Go进阶-分布式爬虫实战

28、调度引擎:负载均衡与调度器实战

你好,我是郑建勋。 在上一节课程中,我们实战了广度优先搜索算法,不过我们对网站的爬取都是在一个协程中进行的。在真实的实践场景中,我们常常需要爬取多个初始网站,我们希望能够同时爬取这些网站。这就需要合理调度和组织爬虫任务了。因此,这节课的重点就是实战任...

Go进阶-分布式爬虫实战

27、掘地三尺:实战深度与广度优先搜索算法

你好,我是郑建勋。 上节课,我们看到了如何在Go中创建高并发模型,这节课让我们回到项目中来,为爬虫项目构建高并发的模型。 要想构建高并发模型,我们首先要做的就是将一个大任务拆解为许多可以并行的小任务。比方说在爬取一个网站时,这个网站中通常会有一连串的...

Go进阶-分布式爬虫实战