go语言实现简单爬取网页案例
本次使用go语言简单实现爬取百度贴吧里面的绝地求生吧,只是利用了一个http.Get()方法即可轻易爬取相关网页代码
直接上代码:
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("网页读取成功")
return
}
if err2 != nil && err2 != io.EOF {
err = err2
return
}
result += string(buf[:n])
}
return
}
func work(start, end int) {
//循环读取网页内容
for i := start; i <= end; i++ {
//这里使用itoa的而不使用string的原因是因为string是按照Ascii码转换的,比如string(97) --> "a"
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)
fmt.Printf("正在读取第%d页\n", i)
//创建一个方法来读取网页内容
result, err := httpGet(url)
if err != nil {
fmt.Println("读取网页出现错误:", err)
return
}
//创建单个文件保存下来
file, err2 := os.Create("第" + strconv.Itoa(i) + "页.html")
if err2 != nil {
fmt.Println("Create err:", err)
//继续读取下一页
continue
}
//直接写入字符串
//也可以用write方法写切片
file.WriteString(result)
file.Close()
}
}
func main() {
var start, end int
fmt.Print("请输入要开始爬取的页数:")
fmt.Scan(&start)
fmt.Print("请输入要结束的爬取页数:")
fmt.Scan(&end)
//启动进程爬取页面
work(start, end)
}
我们在控制台输入想要爬取的页面数
查看控制台可看到网页读取成功信息
程序会将爬取到的代码放入创建的文件中,文件会保存在项目包目录下
打开任意一个文件,即可查看爬取到的内容