介绍
知识星球Go项目实战
的第一个实战项目—>爬虫。
本文记录直播内容和相关细节。
前端相关
DOM,CSS选择器,jQuery
系统设计
技术选型
- 前端:Bootstrap和jQuery
- 后端:Go
- 数据库:MySQL
数据库设计思路
- job_info 表:我们计划抓取猎聘、Boss直聘和拉钩网三个网站的 Go 语言相关职位信息。通过分析三个网站上的职位信息数据,结合咱们的目标,设计了 job_info 表;
- crawl_rule 表:针对 job_info 表的设计,我们希望在网站职位的详情页能够获取到相应信息。因为每个网站页面结构不同,抓取策略也会不一样,因此有了此表;
- auto_crawl_rule 表:crawl_rule 表是针对一个职位详情页的,但我们不可能手动一个页面一个页面抓取,而是希望能够提供一些信息将某个网站上相关职位信息批量抓取。此表用于抓取职位列表信息,进而抓取一个个职位信息;
数据库设计原则和注意事项(重点)
1,字段不允许 NULL 且提供默认值,即 NOT NULL DEFAULT xx;
2,选择合适的最小数据类型;
3,确保是非负数的字段,加上 unsigned;
4,使用 COMMENT 给字段加备注;
5,表一般应该有 created_at 字段;
6,没特殊情况,请使用 InnoDB 引擎;
7,字符编码使用 utf8mb4;不要用utf8
8,VARCHAR 类型的长度值使用 2 的幂次方减1或减2,比如 varchar(127) varchar(255) varchar(510) 因为 510 这个数字(长度)本身需要 2 个字节存储。(也就是长度超过 255 之后,用两个字节存储长度,所以减 2);
9,根据查询条件,建立必要的索引;
10,NOT NULL,确保它一定不是NULL;
项目结构和代码组织
1 | . |
关于配置文件
1,写死,保底
2,通过配置拿到数据,两种形式,读取配置文件和命令行参数传递过来
3,读环境变量
小结
本项目主要熟悉和培养用Go设计项目的框架,同时也把前段时间学习的知识点做了综合运用。下面记录下一些关键信息:
- 熟悉
go mod
- 执行数据库语句的代码和数据库语句最好分开来操作
- 数据量很大的时候,最好不要随意改变数据表中的字段,不然服务会挂
- 项目中还有待完善的部分,例如
Colly
的实现,结构体转数据表或数据表转结构体,选择分析器的部分
提问环节
Q1:cmd下为什么要有crawler文件夹
如果cmd下放main.go,编译出来的文件名叫什么?—cmd
Q2:并发版爬虫?什么时候成分布式的啊
抓的太频繁,会被封。
Q3:測試 controller 會直接對 db 調用,不知道這樣好嗎
Q4:http 为什么要加 recover ? 默认没有么