GO爬虫爬取百度贴吧示例
爬虫概念:
访问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) }