Go语言爬虫(-)
爬虫的概念:
访问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)
}
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 时间海!
评论