83-golang爬虫



网络爬虫
模拟浏览器发送请求
获取数据


爬虫用途
1.呈现数据,呈现在app或者网站上
2.进行数据分析,获得结论

爬虫分类
1.通用爬虫: 搜索引擎的爬虫
2.聚焦爬虫: 针对特定网站的爬虫

聚焦爬虫的工作流程
1.明确url: 请求地址,明确爬什么
2.发送请求: 获取响应数据
3.保存响应数据: 提取有用的信息
4.处理数据

爬虫爬取哪些数据
1.咨询公司: 特定领域的新闻数据
2.金融公司: 关于各个公司的动态信息
3.酒店旅游: 酒店价格,机票信息等
4.房地产:   房地产门户楼盘信息,政府动态
5:保健医药: 医疗数据价格,市场信息


写一下
1.明确url
2.发送请求
3.获取数据,提取数据
4.处理数据,保存


新建一个go


我们请求一下海贼王贴吧数据
https://tieba.baidu.com/f?kw=%E6%B5%B7%E8%B4%BC%E7%8E%8B&ie=utf-8&pn=0


func main() {

	start(1, 5)

}

func start(start int, end int) {
	for i := start; i <= end; i++ {

		//拼接url
		url := "https://tieba.baidu.com/f?kw=%E6%B5%B7%E8%B4%BC%E7%8E%8B&ie=utf-8&pn=" + strconv.Itoa(50*(i-1))

		//使用get方法请求
		resp, err := http.Get(url)
		if err != nil {
			fmt.Println("请求失败...", err)
			continue
		}
		defer resp.Body.Close()

		//读取resp.body响应体
		bytes, err := ioutil.ReadAll(resp.Body)
		if err != nil {
			fmt.Println("读取失败...", err)
			continue
		}

		//拼接文件名
		filename := "f:/test/第" + strconv.Itoa(i) + "页.txt"

		//将数据写入到文件里
		writeErr := ioutil.WriteFile(filename, bytes, 0666)
		if writeErr != nil {
			fmt.Println("写入失败...", writeErr)
			continue
		}

		fmt.Println("第", i, "页爬取成功...")

	}
}




我们修改一下
改成go程并发的爬虫


var channel = make(chan bool)

func main() {

	start(1, 20)

}

func start(start int, end int) {

	for i := start; i <= end; i++ {

		url := "https://tieba.baidu.com/f?kw=%E6%B5%B7%E8%B4%BC%E7%8E%8B&ie=utf-8&pn=" + strconv.Itoa(50*(i-1))
		filename := "f:/test/第" + strconv.Itoa(i) + "页.txt"

		go spider(i, url, filename)

	}

	for i := start; i <= end; i++ {
		<-channel
	}
}

func spider(i int, url string, filename string) {

	defer stop(i)

	resp, err := http.Get(url)
	if err != nil {
		fmt.Println("请求失败...", err)
		return
	}
	defer resp.Body.Close()

	bytes, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		fmt.Println("读取失败...", err)
		return
	}

	writeErr := ioutil.WriteFile(filename, bytes, 0666)
	if writeErr != nil {
		fmt.Println("写入失败...", err)
		return
	}

}

func stop(i int) {
	fmt.Println("成功", i)
	channel <- true
}



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值