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

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

Go进阶-分布式爬虫实战

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

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

Go进阶-分布式爬虫实战

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

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

Go进阶-分布式爬虫实战

33、固若金汤:限速器与错误处理

你好,我是郑建勋。 我们前面的课程,由于一直都是不加限制地并发爬取目标网站,很容易导致被服务器封禁。为了能够正常稳定地访问服务器,我们这节课要给项目增加一个重要的功能:限速器。同时,我们还会介绍在Go中进行错误处理的最佳实践。 限速器先来看限速器。很...

Go进阶-分布式爬虫实战

34、服务注册与监听:Worker节点与etcd交互

你好,我是郑建勋。 这节课,让我们将Worker节点变为一个支持GRPC与HTTP协议访问的服务,让它最终可以被Master服务和外部服务直接访问。在Worker节点上线之后,我们还要将Worker节点注册到服务注册中心。 GRPC与Protocol...

Go进阶-分布式爬虫实战

35、未雨绸缪:怎样通过静态与动态代码扫描保证代码质量

你好,我是郑建勋。 这节课让我们继续优化代码,让程序可配置化。然后通过静态与动态的代码扫描发现程序中存在的问题,让代码变得更加优雅。 micro中间件首先,让我们紧接上节课的go-micro框架,对代码进行优化,设置go-micro的中间件。如下,我...

Go进阶-分布式爬虫实战

36、测试的艺术:依赖注入、表格测试与压力测试

你好,我是郑建勋。 对代码的功能与逻辑进行测试是项目开发中非常重要的一部分。这节课,我们一起来看几个在Go中进行代码测试的核心技术:单元测试、压力测试与基准测试。它们共同保证了代码的准确性、可靠性与高效性。 单元测试单元测试又叫做模块测试,它会对程序...

Go进阶-分布式爬虫实战

37、工具背后的工具:从代码覆盖率到模糊测试

你好,我是郑建勋。 开始今天的学习之前,我想先问你一个问题,你认为什么样的代码才是高质量的? 代码覆盖率,也就是有效代码的比例为我们提供了一种重要的衡量维度。 代码覆盖率指的是,在测试时被执行的源代码占全部源代码的比例。测试代码覆盖率可以衡量软件的质...

Go进阶-分布式爬虫实战

38、高级调试:怎样利用Delve调试复杂的程序问题

你好,我是郑建勋。 工欲善其事,必先利其器。这节课,我们来看看怎么合理地使用调试器让开发事半功倍。调试器能够控制应用程序的执行,它可以让程序在特定的位置暂停并观察当前的状态,还能够控制单步执行代码和指令,以便观察程序的执行分支。 当我们谈到调试器,一...

Go进阶-分布式爬虫实战

39、性能分析利器:深入pprof与trace工具

你好,我是郑建勋。 这节课,我们来学习分析Go程序的利器:pprof和trace。 pprof及其使用方法先来看pprof。pprof用于对指标或特征的分析(Profiling)。借助pprof,我们能够定位程序中的错误(内存泄漏、race 冲突、协...

Go进阶-分布式爬虫实战