爬虫的概念:

​ 访问web服务器,获取指定数据信息的一段程序

工作流程:

1.明确目标URL
2.发送请求、获取应答数据包
3.保存、过滤数据,提取有用信息
4.使用、分析得到数据信息


横向爬取(html,没有css和模板引擎)


https://tieba.baidu.com/f?ie=utf-8&kw=%E8%8B%B1%E9%9B%84%E8%81%94%E7%9B%9F&fr=search

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
        }
        //累加每一次循环读到的buf数据,存入result一次性返回
        result +=string(buf[:n])
    }
    return

}

func working(start,end int){
    fmt.Printf("开始%d页到%d",start,end)
    for i:=start ;i<=end;i++{
        //贴吧每页的规律是url后面的数字加50
        url :="https://tieba.baidu.com/f?kw=%E8%8B%B1%E9%9B%84%E8%81%94%E7%9B%9F&ie=utf-8&pn="+strconv.Itoa((i-1)*50)
        result,err :=HttpGet(url)

        if err !=nil{
            fmt.Println("HttpGet err=",err)
            continue
        }
        //fmt.Println("result=",result)
        //讲读到的整网页数据,保存成一个文件
        f,err :=os.Create("第 "+strconv.Itoa(i)+" 页"+".html")
        if err !=nil{
            fmt.Println("Create err=",err)
            continue
        }
        f.WriteString(result)
        f.Close()    //保存好一个文件关闭一个文件
    }
}

func main(){
    //指定爬取起始、终止页
    var start,end int
    fmt.Println("请输入爬取的起始页(>=1):")
    fmt.Scan(&start)
    fmt.Println("请输入爬取的终止页(>=start):")
    fmt.Scan(&end)

    working(start,end)

}