博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Go语言之进阶篇爬百度贴吧并发版
阅读量:4988 次
发布时间:2019-06-12

本文共 2673 字,大约阅读时间需要 8 分钟。

1、爬百度贴吧并发版

示例:

package mainimport (	"fmt"	"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()	//读取网页body内容	buf := make([]byte, 1024*4)	for {		n, _ := resp.Body.Read(buf)		if n == 0 { //读取结束,或者,出问题			//fmt.Println("resp.Body.Read err = ", err)			break		}		result += string(buf[:n])	}	return}//爬取一个网页func SpiderPage(i int, page chan int) {	url := "http://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页网页: %s\n", i, url)	//2) 爬 (将所有的网站的内容全部爬下来)	result, err := HttpGet(url)	if err != nil {		fmt.Println("HttpGet err = ", err)		return	}	//把内容写入到文件	fileName := strconv.Itoa(i) + ".html"	f, err1 := os.Create(fileName)	if err1 != nil {		fmt.Println("os.Create err1 = ", err1)		return	}	f.WriteString(result) //写内容	f.Close() //关闭文件	page <- i}func DoWork(start, end int) {	fmt.Printf("正在爬取 %d 到 %d 的页面\n", start, end)	page := make(chan int)	//明确目标 (要知道你准备在哪个范围或者网站去搜索)	for i := start; i <= end; i++ {		go SpiderPage(i, page)	}	for i := start; i <= end; i++ {		fmt.Printf("%第%d个页面爬取完成\n", <-page)	}}func main() {	var start, end int	fmt.Printf("请输入起始页( >= 1) :")	fmt.Scan(&start)	fmt.Printf("请输入终止页( >= 起始页) :")	fmt.Scan(&end)	DoWork(start, end)}

执行结果:

D:\GoFiles\src\hello_01>go run get_web.go请输入起始页( >= 1) :1请输入终止页( >= 起始页) :10正在爬取 1 到 10 的页面正在爬第3页网页: http://tieba.baidu.com/f?kw=%E7%BB%9D%E5%9C%B0%E6%B1%82%E7%94%9F&ie=utf-8&pn=100正在爬第10页网页: http://tieba.baidu.com/f?kw=%E7%BB%9D%E5%9C%B0%E6%B1%82%E7%94%9F&ie=utf-8&pn=450正在爬第6页网页: http://tieba.baidu.com/f?kw=%E7%BB%9D%E5%9C%B0%E6%B1%82%E7%94%9F&ie=utf-8&pn=250正在爬第7页网页: http://tieba.baidu.com/f?kw=%E7%BB%9D%E5%9C%B0%E6%B1%82%E7%94%9F&ie=utf-8&pn=300正在爬第8页网页: http://tieba.baidu.com/f?kw=%E7%BB%9D%E5%9C%B0%E6%B1%82%E7%94%9F&ie=utf-8&pn=350正在爬第9页网页: http://tieba.baidu.com/f?kw=%E7%BB%9D%E5%9C%B0%E6%B1%82%E7%94%9F&ie=utf-8&pn=400正在爬第2页网页: http://tieba.baidu.com/f?kw=%E7%BB%9D%E5%9C%B0%E6%B1%82%E7%94%9F&ie=utf-8&pn=50正在爬第4页网页: http://tieba.baidu.com/f?kw=%E7%BB%9D%E5%9C%B0%E6%B1%82%E7%94%9F&ie=utf-8&pn=150正在爬第5页网页: http://tieba.baidu.com/f?kw=%E7%BB%9D%E5%9C%B0%E6%B1%82%E7%94%9F&ie=utf-8&pn=200正在爬第1页网页: http://tieba.baidu.com/f?kw=%E7%BB%9D%E5%9C%B0%E6%B1%82%E7%94%9F&ie=utf-8&pn=0%!第(int=4)%!d(MISSING)个页面爬取完成%!第(int=9)%!d(MISSING)个页面爬取完成%!第(int=3)%!d(MISSING)个页面爬取完成%!第(int=8)%!d(MISSING)个页面爬取完成%!第(int=10)%!d(MISSING)个页面爬取完成%!第(int=1)%!d(MISSING)个页面爬取完成%!第(int=5)%!d(MISSING)个页面爬取完成%!第(int=2)%!d(MISSING)个页面爬取完成%!第(int=7)%!d(MISSING)个页面爬取完成%!第(int=6)%!d(MISSING)个页面爬取完成

  

 

转载于:https://www.cnblogs.com/nulige/p/10324284.html

你可能感兴趣的文章
929. Unique Email Addresses
查看>>
3.常见的ORM框架
查看>>
Hdu 1326 Box of Bricks
查看>>
常用数据结构算法 : 堆排序
查看>>
Highcharts X轴名称太长,如何设置下面这种样式
查看>>
使用模板类,创建树。使用头文件分离模板类的申明与实现时出错
查看>>
王者的世界:全球十大对冲基金公司传奇
查看>>
Lua相关图书推荐
查看>>
CentOS安装phpMyAdmin
查看>>
JSTL标签
查看>>
RTT之柿饼UI
查看>>
C51 笔记
查看>>
wkhtmltopdf导出html到pdf
查看>>
Flutter 目录结构介绍、入口、自定义 Widget、MaterialApp 组件、Scaffold 组件
查看>>
小记5.8面试
查看>>
关于Windows7下创建Cocos2D-X项目的小问题
查看>>
java之大文件断点续传
查看>>
全文搜索引擎Xapian
查看>>
QRadioButton 使用方法
查看>>
[LeetCode] Exclusive Time of Functions 函数的独家时间
查看>>