Google资深工程师深度讲解Go语言

课程目录

  • 第1章 课程介绍

    欢迎大家来到深度讲解Go语言的课堂。本课程将从基本语法讲起,逐渐深入,帮助同学深度理解Go语言面向接口,函数式编程,错误处理,测试,并行计算等元素,并带领大家实现一个分布式爬虫的实战项目。

    • 1-1 课程导读
    • 1-2 安装与环境
  • 第2章 基础语法

    量,常量,类型,选择,循环,函数,指针,本章节带领大家学习一门新语言所需的必备语法知识。让大家对Go语言有一个初步的认识!

    • 2-1 变量定义
    • 2-2 内建变量类型
    • 2-3 常量与枚举
    • 2-4 条件语句
    • 2-5 循环
    • 2-6 函数
    • 2-7 指针
  • 第3章 内建容器

    本章节我们来学习数组,切片,Map和字符串。在Go语言中,我们一般不直接使用数组,而是使用切片来管理线性表结构,它的语法类似python的list,不过更强大哦。当然,Map和字符串的学习也是必不可少。掌握至此,我们就可以写一些简单的算法了,刷刷leetcode不在话下,我们就来试一试。…

    • 3-1 数组
    • 3-2 切片的概念
    • 3-3 切片的操作
    • 3-4 Map
    • 3-5 Map例题
    • 3-6 字符和字符串处理
  • 第4章 面向“对象”

    Go语言没有class,只有struct。我们来看看struct如何使用,Go语言给结构体定义类似方法或者成员函数的做法非常有特色。我们还将学习Go语言的包的概念,以及如何封装,如何扩展已有类型等。我们还将学习GOPATH和Go语言项目的目录结构,如何从网上下载依赖包等一系列项目相关的知识。我们将以“树”的结构和遍历作为贯穿本章…

    • 4-1 结构体和方法
    • 4-2 包和封装
    • 4-3 扩展已有类型
    • 4-4 GOPATH以及目录结构
  • 第5章 面向接口

    这一章我们从duck typing的概念开始学起,还将探讨其他语言中对duck typing的支持,由此引出接口的概念。我们将深入理解Go语言接口的内部实现以及使用接口实现组合的模式。

    • 5-1 duck typing的概念
    • 5-2 接口的定义和实现
    • 5-3 接口的值类型
    • 5-4 接口的组合
    • 5-5 常用系统接口
  • 第6章 函数式编程

    在其他通用语言中,函数式编程是“高级”概念,但对于Go语言却非常基本。本章我们将讲解函数式编程的概念并且比较其他语言函数式编程的实现方法。我们将重点理解闭包。这章中我们将采用多样的例题来帮助大家更好的理解闭包,函数作为一等公民等及其常见概念和应用方法。…

    • 6-1 函数式编程
    • 6-2 函数式编程例一
    • 6-3 函数式编程例二
  • 第7章 错误处理和资源管理

    这将是本课程最“无聊”的一章,但却是区分出优秀软件工程师的关键能力。Go语言独特的defer/panic/recover,以及错误机制,在社区有着广泛的争论。我们来深入理解Go语言的错误处理机制,看看Go语言如何区分错误以及异常。最后,我们实现一个Web应用微型项目,采用商业服务的错误处理思路,结合函数式编程,来演示Go语言错误…

    • 7-1 defer调用
    • 7-2 错误处理概念
    • 7-3 服务器统一出错处理
    • 7-4 panic和recover
    • 7-5 服务器统一出错处理2
  • 第8章 测试与性能调优

    Go语言的测试不同于其他如junit,Go语言采用“表格驱动测试”的理念。我们将学习和体会这样的理念,并用Go语言的测试支持库来实践表格驱动测试,并做代码覆盖和性能检测,通过內建的性能调优工具来优化我们之前的算法。最后演示了对http服务器的多种粒度的测试。…

    • 8-1 测试
    • 8-2 代码覆盖率和性能测试
    • 8-3 使用pprof进行性能调优
    • 8-4 测试http服务器(上)
    • 8-5 测试http服务器(下)
    • 8-6 生成文档和示例代码
    • 8-7 测试总结
  • 第9章 Goroutine

    这一章开始我们进入并发编程。我们讲解Goroutine,协程的概念,以及背后的Go语言调度器。

    • 9-1 goroutine
    • 9-2 go语言的调度器
  • 第10章 Channel

    Channel是Goroutine之间通信的桥梁,它和函数一样是一等公民。在介绍完Channel的语法及运行方式后,我们将采用数个例题来演示Go语言并发编程中最常见的任务极其解决模式。

    • 10-1 channel
    • 10-2 使用Channel等待任务结束
    • 10-3 使用Channel进行树的遍历
    • 10-4 用select进行调度
    • 10-5 传统同步机制
  • 第11章 http及其他标准库

    这里我们简要介绍一下Go语言中非常重要而且封装良好的http标准库,回顾并实现http客户端和服务器。我们还介绍了Go语言中其他的标准库。

    • 11-1 http标准库
    • 11-2 其它标准库
  • 第12章 迷宫的广度优先搜索

    这章我们将综合运用学过的知识实现一个广度优先算法来解迷宫,为接下来的实战项目做好技术和算法上的准备。广度优先算法不仅是面试和工作中常用的技术,而且实现上相比大部分其它算法更为复杂,是检验是否熟练掌握一门语言的经典例题。让我们来试一试吧。…

    • 12-1 迷宫_算法
    • 12-2 迷宫代码实现
  • 第13章 开始实战项目

    至此为止,恭喜同学完成了这门课Go语言部分的学习。接下来我们来进入实战项目。本章将介绍项目的具体内容,课题的选择,技术选型,总体架构,以及实现步骤。

    • 13-1 爬虫项目介绍
    • 13-2 总体算法
  • 第14章 单任务版爬虫

    在考虑性能之前我们首先应该考虑正确性。单任务版爬虫确保我们能够正确爬取我们所需的信息。我们应用了之前练习的广度优先算法,抽象出Parser和Fetcher,学习正则表达式,成功实现并运行单任务版爬虫。

    • 14-1 获得初始页面内容
    • 14-2 正则表达式
    • 14-3 提取城市和url
    • 14-4 单任务版爬虫的架构
    • 14-5 Engine 与 Parser
    • 14-6 测试CityListParser
    • 14-7 城市解析器
    • 14-8 用户信息解析器(上)
    • 14-9 用户信息解析器(下)
    • 14-10 单任务版爬虫性能
  • 第15章 并发版爬虫

    为了提升爬虫性能,我们抽象出Worker的概念,并添加调度器,实现并发版爬虫。我们应用接口的概念,完成了由简至复杂的多个调度器的实现。同学可以在实战项目中更真实的体会并学习Go语言并发编程的多种模式。

    • 15-1 并发版爬虫架构
    • 15-2 简单调度器
    • 15-3 并发调度器
    • 15-4 队列实现调度器
    • 15-5 重构和总结
    • 15-6 更多城市
    • 15-7 更多用户与去重
  • 第16章 数据存储和展示

    是时候检验我们项目的成果了。我们将采用Docker+ElasticSearch来存储我们爬取的信息。在简单了解Docker和ElasticSearch后,我们将使用ElasticSearch的Go语言客户端将爬取数据写入。之后我们使用Go语言的模板引擎迅速实现前端网页展示。至此,我们已经可以尝试自己喜欢的搜索条件去查看数据啦。…

    • 16-1 ItemSaver的架构
    • 16-2 Docker和ElasticSearch介绍
    • 16-3 Docker的安装和使用
    • 16-4 ElasticSearch入门
    • 16-5 向ElasticSearch存储数据
    • 16-6 完整爬虫的运行与数据存储
    • 16-7 添加URL与ID
    • 16-8 重构与运行
    • 16-9 标准模板库介绍
    • 16-10 实现前端展示页面
    • 16-11 完善前端展示
  • 第17章 分布式爬虫

    本章在简要介绍分布式概念后,将我们的并发爬虫改写成分布式。我们在很少改动的情况下,加入jsonrpc客户/服务端,实现并部署分布式爬虫。最后探讨实战项目的更多改进方案。

    • 17-1 分布式系统简介
    • 17-2 分布式爬虫架构
    • 17-3 jsonrpc的使用
    • 17-4 ItemSaver服务
    • 17-5 整合ItemSaver服务
    • 17-6 解析器的序列化
    • 17-7 实现爬虫服务
    • 17-8 完整分布式爬虫的运行
    • 17-9 使用连接池链接爬虫集群
    • 17-10 实战项目总结
    • 17-11 进一步的工作
  • 第18章 课程总结

    感谢同学们学到这里,恭喜同学们给自己的技术栈加上了非常重要的Go语言技能。希望同学们带着这门课上学到的知识,更好的参与到项目中去,共同推动Go语言的发展。

    • 18-1 体会Go语言的设计
    • 18-2 课程总结

    感谢来自@akashi_sai 的投稿!!

Python分布式爬虫打造搜索引擎

课程简介:

聚焦Python分布式爬虫必学框架Scrapy 打造搜索引擎
未来是什么时代?是数据时代!数据分析服务、互联网金融,数据建模、自然语言处理、医疗病例分析……越来越多的工作会基于数据来做,而爬虫正是快速获取数据最重要的方式,相比其它语言,Python爬虫更简单、高效

从0讲解爬虫基本原理,对爬虫中所需要用到的知识点进行梳理,从搭建开发环境、设计数据库开始,通过爬取三个知名网站的真实数据,带你由浅入深的掌握Scrapy原理、各模块使用、组件开发,Scrapy的进阶开发以及反爬虫的策略

彻底掌握Scrapy之后,带你基于Scrapy、Redis、elasticsearch和django打造一个完整的搜索引擎网站

[code]课程来源链接:http://coding.imooc.com/class/92.html[/code]

课程目录:

第1章 课程介绍
介绍课程目标、通过课程能学习到的内容、和系统开发前需要具备的知识
1-1 python分布式爬虫打造搜索引擎简介

第2章 windows下搭建开发环境
介绍项目开发需要安装的开发软件、 python虚拟virtualenv和 virtualenvwrapper的安装和使用、 最后介绍pycharm和navicat的简单使用
2-1 pycharm的安装和简单使用
2-2 mysql和navicat的安装和使用
2-3 windows和linux下安装python2和python3
2-4 虚拟环境的安装和配置

第3章 爬虫基础知识回顾
介绍爬虫开发中需要用到的基础知识包括爬虫能做什么,正则表达式,深度优先和广度优先的算法及实现、爬虫url去重的策略、彻底弄清楚unicode和utf8mb4编码的区别和应用。
3-1 技术选型 爬虫能做什么
3-2 正则表达式-1
3-3 正则表达式-2
3-4 正则表达式-3
3-5 深度优先和广度优先原理
3-6 url去重方法
3-7 彻底搞清楚unicode和utf8mb4编码

第4章 scrapy爬取知名技术文章网站
搭建scrapy的开发环境,本章介绍scrapy的常用命令以及工程目录结构分析,本章中也会详细的讲解xpath和css选择器的使用。然后通过scrapy提供的spider完成所有文章的爬取。然后详细讲解item以及item loader方式完成具体字段的提取后使用scrapy提供的pipeline分别将数据保存到json文件以及mysql数据库中。…
4-1 scrapy安装以及目录结构介绍
4-2 pycharm 调试scrapy 执行流程
4-3 xpath的用法 – 1
4-4 xpath的用法 – 2
4-5 xpath的用法 – 3
4-6 css选择器实现字段解析 – 1
4-7 css选择器实现字段解析 – 2
4-8 编写spider爬取jobbole的所有文章 – 1
4-9 编写spider爬取jobbole的所有文章 – 2
4-10 items设计 – 1
4-11 items设计 – 2
4-12 items设计 – 3
4-13 数据表设计和保存item到json文件
4-14 通过pipeline保存数据到mysql – 1
4-15 通过pipeline保存数据到mysql – 2
4-16 scrapy item loader机制 – 1
4-17 scrapy item loader机制- 2

第5章 scrapy爬取知名问答网站
本章主要完成网站的问题和回答的提取。本章除了分析出问答网站的网络请求以外还会分别通过requests和scrapy的FormRequest两种方式完成网站的模拟登录, 本章详细的分析了网站的网络请求并分别分析出了网站问题回答的api请求接口并将数据提取出来后保存到mysql中。…
5-1 session和cookie自动登录机制
5-2 (补充)selenium模拟知乎登录-2017-12-29
5-3 requests模拟登陆知乎 – 1
5-4 requests模拟登陆知乎 – 2
5-5 requests模拟登陆知乎 – 3
5-6 scrapy模拟知乎登录
5-7 知乎分析以及数据表设计1
5-8 知乎分析以及数据表设计 – 2
5-9 item loder方式提取question – 1
5-10 item loder方式提取question – 2
5-11 item loder方式提取question – 3
5-12 知乎spider爬虫逻辑的实现以及answer的提取 – 1
5-13 知乎spider爬虫逻辑的实现以及answer的提取 – 2
5-14 保存数据到mysql中 -1
5-15 保存数据到mysql中 -2
5-16 保存数据到mysql中 -3
5-17 (补充小节)知乎验证码登录 – 1_1
5-18 (补充小节)知乎验证码登录 – 2_1
5-19 (补充)知乎倒立文字识别-1
5-20 (补充)知乎倒立文字识别-2

第6章 通过CrawlSpider对招聘网站进行整站爬取
本章完成招聘网站职位的数据表结构设计,并通过link extractor和rule的形式并配置CrawlSpider完成招聘网站所有职位的爬取,本章也会从源码的角度来分析CrawlSpider让大家对CrawlSpider有深入的理解。
6-1 数据表结构设计
6-2 CrawlSpider源码分析-新建CrawlSpider与settings配置
6-3 CrawlSpider源码分析
6-4 Rule和LinkExtractor使用
6-5 item loader方式解析职位
6-6 职位数据入库-1
6-7 职位信息入库-2

第7章 Scrapy突破反爬虫的限制
本章会从爬虫和反爬虫的斗争过程开始讲解,然后讲解scrapy的原理,然后通过随机切换user-agent和设置scrapy的ip代理的方式完成突破反爬虫的各种限制。本章也会详细介绍httpresponse和httprequest来详细的分析scrapy的功能,最后会通过云打码平台来完成在线验证码识别以及禁用cookie和访问频率来降低爬虫被屏蔽的可能性。…
7-1 爬虫和反爬的对抗过程以及策略
7-2 scrapy架构源码分析
7-3 Requests和Response介绍
7-4 通过downloadmiddleware随机更换user-agent-1
7-5 通过downloadmiddleware随机更换user-agent – 2
7-6 scrapy实现ip代理池 – 1
7-7 scrapy实现ip代理池 – 2
7-8 scrapy实现ip代理池 – 3
7-9 云打码实现验证码识别
7-10 cookie禁用、自动限速、自定义spider的settings

第8章 scrapy进阶开发
本章将讲解scrapy的更多高级特性,这些高级特性包括通过selenium和phantomjs实现动态网站数据的爬取以及将这二者集成到scrapy中、scrapy信号、自定义中间件、暂停和启动scrapy爬虫、scrapy的核心api、scrapy的telnet、scrapy的web service和scrapy的log配置和email发送等。 这些特性使得我们不仅只是可以通过scrapy来完成…
8-1 selenium动态网页请求与模拟登录知乎
8-2 selenium模拟登录微博, 模拟鼠标下拉
8-3 chromedriver不加载图片、phantomjs获取动态网页
8-4 selenium集成到scrapy中
8-5 其余动态网页获取技术介绍-chrome无界面运行、scrapy-splash、selenium-grid, splinter
8-6 scrapy的暂停与重启
8-7 scrapy url去重原理
8-8 scrapy telnet服务
8-9 spider middleware 详解
8-10 scrapy的数据收集
8-11 scrapy信号详解
8-12 scrapy扩展开发

第9章 scrapy-redis分布式爬虫
Scrapy-redis分布式爬虫的使用以及scrapy-redis的分布式爬虫的源码分析, 让大家可以根据自己的需求来修改源码以满足自己的需求。最后也会讲解如何将bloomfilter集成到scrapy-redis中。
9-1 分布式爬虫要点
9-2 redis基础知识 – 1
9-3 redis基础知识 – 2
9-4 scrapy-redis编写分布式爬虫代码
9-5 scrapy源码解析-connection.py、defaults.py-
9-6 scrapy-redis源码剖析-dupefilter.py-
9-7 scrapy-redis源码剖析- pipelines.py、 queue.py-
9-8 scrapy-redis源码分析- scheduler.py、spider.py-
9-9 集成bloomfilter到scrapy-redis中

第10章 elasticsearch搜索引擎的使用
本章将讲解elasticsearch的安装和使用,将讲解elasticsearch的基本概念的介绍以及api的使用。本章也会讲解搜索引擎的原理并讲解elasticsearch-dsl的使用,最后讲解如何通过scrapy的pipeline将数据保存到elasticsearch中。
10-1 elasticsearch介绍
10-2 elasticsearch安装
10-3 elasticsearch-head插件以及kibana的安装
10-4 elasticsearch的基本概念
10-5 倒排索引
10-6 elasticsearch 基本的索引和文档CRUD操作
10-7 elasticsearch的mget和bulk批量操作
10-8 elasticsearch的mapping映射管理
10-9 elasticsearch的简单查询 – 1
10-10 elasticsearch的简单查询 – 2
10-11 elasticsearch的bool组合查询
10-12 scrapy写入数据到elasticsearch中 – 1
10-13 scrapy写入数据到elasticsearch中 – 2

第11章 django搭建搜索网站
本章讲解如何通过django快速搭建搜索网站, 本章也会讲解如何完成django与elasticsearch的搜索查询交互。
11-1 es完成搜索建议-搜索建议字段保存 – 1
11-2 es完成搜索建议-搜索建议字段保存 – 2
11-3 django实现elasticsearch的搜索建议 – 1
11-4 django实现elasticsearch的搜索建议 – 2
11-5 django实现elasticsearch的搜索功能 -1
11-6 django实现elasticsearch的搜索功能 -2
11-7 django实现搜索结果分页
11-8 搜索记录、热门搜索功能实现 – 1
11-9 搜索记录、热门搜索功能实现 – 2

第12章 scrapyd部署scrapy爬虫
本章主要通过scrapyd完成对scrapy爬虫的线上部署。
12-1 scrapyd部署scrapy项目

第13章 课程总结
重新梳理一遍系统开发的整个过程, 让同学对系统和开发过程有一个更加直观的理解
13-1 课程总结

课程截图:


感谢来自@cdsf 的投稿!