爬虫概念:
访问web服务器,获取指定数据信息的一段程序。

工作流程:
1. 明确目标 Url
2. 发送请求,获取应答数据包。 http.Get(url)
3. 过滤 数据。提取有用信息。
4. 使用、分析得到数据信息。

百度贴吧爬虫实现:

1. 提示用户指定 起始、终止页。 创建working函数
2. 使用 start、end 循环 爬取每一页数据
3. 获取 每一页的 URL —— 下一页 = 前一页 + 50
4. 封装、实现 HttpGet() 函数,爬取一个网页的数据内容,通过 result 返回。
http.Get/ resp.Body.Close/ buf := make(4096)/ for { resp.Body.Read(buf)/ result += string(buf[:n]) return
5. 创建 .html 文件。 使用循环因子 i 命名。
6. 将 result 写入 文件 f.WriteString(result)。 f.close() 不推荐使用 defer 。

package main

import (
	"fmt"
	"io"
	"net/http"
	"os"
	"strconv"
)
func HttpGet(url string) (result string,err error){
	resp,err1 := http.Get(url)
	if err1 != nil{
		err = err1 //出错时将内部错误传出给调用者
		return
	}
	defer resp.Body.Close()

	//循环接收数据
	buf := make([]byte,4096)
	for{
		n,err2 := resp.Body.Read(buf)
		if n == 0{
			fmt.Println("读取网页完成")
			break
		}
		if err2 != nil && err2 != io.EOF{
			err = err2
			return
		}
		result += string(buf[:n])
	}
	return
}

func working(start int,end int)  {
	fmt.Printf("正在爬取%d-%d页",start,end)

	for i:=start;i < end;i++{
		url := "https://tieba.baidu.com/f?kw=%E7%8E%8B%E8%80%85%E8%8D%A3%E8%80%80&ie=utf-8&cid=&tab=corearea&pn="+strconv.Itoa((i-1)*50)
		result,err := HttpGet(url)
		if err != nil{
			fmt.Printf("页码%d出错跳过",i)
			continue
		}
		//fmt.Println("result=",result[:10])
		//写入文件
		fp,err := os.Create("第"+strconv.Itoa(i)+"页.html")
		if err != nil{
			fmt.Println("创建失败",err)
			continue
		}
		fp.WriteString(result)
		fp.Close() //每次都关闭
	}

}

func main() {
	var start, end int
	fmt.Print("请输入要爬取的起始页码:")
	fmt.Scan(&start)

	fmt.Print("请输入要爬取的结束页码:")
	fmt.Scan(&end)

	working(start, end)
}