```
package main
import (
"fmt"
"io/ioutil"
"net/http"
"os"
"strconv"
"time"
)
func SpiderPage(i int, page chan int) {
//抓取数据
url := "https://tieba.baidu.com/f?kw=%E7%BB%9D%E5%9C%B0%E6%B1%82%E7%94%9F&ie=utf-8&pn="+ strconv.Itoa((i-1)*50)
data, err := http_get1(url)
if err != nil {
fmt.Println("http get err : ", err)
return
}
//保存到文件
f, err := os.Create("第"+strconv.Itoa(i)+"页.html")
if err != nil {
fmt.Println("写入文件失败 : ", i, err)
return
}
f.WriteString(data)
f.Close()
page <- i
}
func work1(start int , end int) {
time.Sleep(time.Second * 1)
page := make(chan int)
for i:=start; i<=end; i++{
go SpiderPage(i, page)
}
for i:=start; i<=end; i++ {
fmt.Printf("第 %d 个页面爬取完成\n", <-page)
}
}
func http_get1(url string)(result string, err error) {
resp, err := http.Get(url)
if err != nil {
return
}
data, err := ioutil.ReadAll(resp.Body)
if err != nil {
return
}
result = string(data)
return
}
func main() {
var start, end int
fmt.Print("请输入起始页:")
fmt.Scan(&start)
fmt.Print("请输入终止页:")
fmt.Scan(&end)
//开始爬
work1(start, end)
}
```
- 认识Golang
- 环境配置
- 找不到包
- civil
- 语言基础
- 执行流程
- 标准命令
- 输入输出
- 常量与变量
- 常量的定义和使用
- 变量
- 枚举
- 数据类型
- 结构体
- 定义和使用
- 函数参数
- 普通数据类型
- 数值型
- 整型
- 浮点类型
- 布尔
- 字符
- 字符串
- 类型转换
- 复杂数据类型
- 指针
- 定义和使用
- 空指针
- 野指针
- new
- 函数参数
- 数组
- 定义
- 切片
- 切片
- Map
- 定义和使用
- 流程控制
- if
- switch
- for
- break
- continue
- goto
- 函数
- 函数的定义与使用
- 不定参函数
- 函数返回值
- 作用域
- 匿名函数
- 闭包
- 传值方式
- 常用函数
- 日期
- 包
- 面向对象
- 异常处理
- 文件读写
- 正则
- io
- Reader
- Writer
- 接口
- 测试
- os
- json
- Marshal
- Unmarshal
- 网络编程
- go程
- runtime
- channel
- 无缓冲channel
- 关闭channel
- 单向channel
- 生产者消费者模型
- 定时器
- tcp
- tcp_server
- tcp_client
- tcp_server_并发
- tcp_client_并发
- 常用框架
- http
- server
- get
- head
- 爬虫
- 百度贴吧
- 百度贴吧( 并发)
- GTK
- beego
- 环境搭建
- model
- 增
- 删
- 改
- 查
- 模块
- context
- httplib
- etcd
- 简介
- 安装
- 使用
- net/html
- goquery
- redis
- redigo
- 爬虫
- gocolly/colly
- 区块链
- 微服务
- 服务发现
- consul
- 简介