背景
要做IP地址归属地查询,量比较大,所以想先从网上找到大部分的分配数据,写个蜘蛛程序来抓取入库,以后在程序的运行中不断进行维护、更新、完善。
一些关键点
- goroutine的使用,让程序并行运行。
- 正则表达式分组信息提取的使用,正确的提取我们关注的信息。
- 数据库批量插入操作。
- 数据库批量更新操作。
代码解析
按功能模块对核心代码进行说明
ip.go
主进程,实现goroutine的调用。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
func main() { //利用go基本库封装的网页抓取函数,后面有说明 ctx := common.HttpGet("http://ips.chacuo.net/") //正则表达式,有两个分组(两组小括号),分别取城市信息与url,具体分析代码后面有说明 reg := regexp.MustCompile(`<li><a id="codetool">
正则表达式说明 主进程针对所有省有入口页面,取得每省的入口分配给一个协程去处理,每一个入口是这个样子
goroutine 流程
获取ip地址信息 与主进程类似,注意无信息时处理。 IpSpider.go
|