第十章_网络编程,38_网络编程_并发贴吧爬虫

创建爬虫程序,爬取百度wow贴吧指定页面全部内容,保存到本地文件,使用协程和管道实现多任务并发爬虫。

第十章_网络编程,38_网络编程_并发贴吧爬虫

源代码

package main

import (
	"fmt"
	"io"
	"net/http"
	"os"
	"strconv"
)

func main() {
    
    
	var start, end int
	fmt.Println("请输入起始页(>=1):")
	fmt.Scan(&start)
	fmt.Println("请输入终止页(>=起始页):")
	fmt.Scan(&end)

	DoWork(start, end)
}

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 SpiderPage(i int, page chan<- int) {
    
    
	url := "https://tieba.baidu.com/f?kw=%E9%AD%94%E5%85%BD%E4%B8%96%E7%95%8C&ie=utf-8&pn=" + strconv.Itoa((i-1)*50)
	url1 := "https://www.pengfu.com/index_2.html"
	fmt.Printf("正在爬第 %d 页网页:%s \n", i, url)

	//爬,把页面所有内容全部爬下来
	result, err1 := HttpGet(url1)
	if err1 != nil {
    
    
		fmt.Println("HttpGet err = ", err1)
		return
	}

	//把内容写入文件
	fimeName := strconv.Itoa(i) + ".html"
	file, err4 := os.Create(fimeName)
	if err4 != nil {
    
    
		fmt.Println("os.Create err4 = ", err4)
		return
	}
	file.WriteString(result)
	file.Close()

	page <- i //当一个任务爬完往管道写数据
}

//爬取网页内容
func HttpGet(url string) (result string, err error) {
    
    
	resp, err2 := http.Get(url)
	if err2 != nil {
    
    
		err = err2
		return
	}
	defer resp.Body.Close()

	//读取网页body内容
	buf := make([]byte, 4*1024)
	for {
    
    
		n, err3 := resp.Body.Read(buf)
		if n == 0 {
    
     //读取结束,或出问题
			if err3 == io.EOF {
    
    
				break
			}
			fmt.Println("resp.Body.Read err3 = ", err3)
			break
		}
		result += string(buf[:n])
	}
	return
}

打印输出

//打印,爬取30个页面
/*
请输入起始页(>=1):
1
请输入终止页(>=起始页):
30
正在爬取 1 到 30
正在爬第 1 页网页:https://tieba.baidu.com/f?kw=%E9%AD%94%E5%85%BD%E4%B8%96%E7%95%8C&ie=utf-8&pn=0
正在爬第 13 页网页:https://tieba.baidu.com/f?kw=%E9%AD%94%E5%85%BD%E4%B8%96%E7%95%8C&ie=utf-8&pn=600
正在爬第 27 页网页:https://tieba.baidu.com/f?kw=%E9%AD%94%E5%85%BD%E4%B8%96%E7%95%8C&ie=utf-8&pn=1300
正在爬第 3 页网页:https://tieba.baidu.com/f?kw=%E9%AD%94%E5%85%BD%E4%B8%96%E7%95%8C&ie=utf-8&pn=100
正在爬第 12 页网页:https://tieba.baidu.com/f?kw=%E9%AD%94%E5%85%BD%E4%B8%96%E7%95%8C&ie=utf-8&pn=550
正在爬第 10 页网页:https://tieba.baidu.com/f?kw=%E9%AD%94%E5%85%BD%E4%B8%96%E7%95%8C&ie=utf-8&pn=450
正在爬第 11 页网页:https://tieba.baidu.com/f?kw=%E9%AD%94%E5%85%BD%E4%B8%96%E7%95%8C&ie=utf-8&pn=500
正在爬第 6 页网页:https://tieba.baidu.com/f?kw=%E9%AD%94%E5%85%BD%E4%B8%96%E7%95%8C&ie=utf-8&pn=250
正在爬第 5 页网页:https://tieba.baidu.com/f?kw=%E9%AD%94%E5%85%BD%E4%B8%96%E7%95%8C&ie=utf-8&pn=200
正在爬第 9 页网页:https://tieba.baidu.com/f?kw=%E9%AD%94%E5%85%BD%E4%B8%96%E7%95%8C&ie=utf-8&pn=400
正在爬第 15 页网页:https://tieba.baidu.com/f?kw=%E9%AD%94%E5%85%BD%E4%B8%96%E7%95%8C&ie=utf-8&pn=700
正在爬第 7 页网页:https://tieba.baidu.com/f?kw=%E9%AD%94%E5%85%BD%E4%B8%96%E7%95%8C&ie=utf-8&pn=300
正在爬第 8 页网页:https://tieba.baidu.com/f?kw=%E9%AD%94%E5%85%BD%E4%B8%96%E7%95%8C&ie=utf-8&pn=350
正在爬第 17 页网页:https://tieba.baidu.com/f?kw=%E9%AD%94%E5%85%BD%E4%B8%96%E7%95%8C&ie=utf-8&pn=800
正在爬第 16 页网页:https://tieba.baidu.com/f?kw=%E9%AD%94%E5%85%BD%E4%B8%96%E7%95%8C&ie=utf-8&pn=750
正在爬第 18 页网页:https://tieba.baidu.com/f?kw=%E9%AD%94%E5%85%BD%E4%B8%96%E7%95%8C&ie=utf-8&pn=850
正在爬第 14 页网页:https://tieba.baidu.com/f?kw=%E9%AD%94%E5%85%BD%E4%B8%96%E7%95%8C&ie=utf-8&pn=650
正在爬第 4 页网页:https://tieba.baidu.com/f?kw=%E9%AD%94%E5%85%BD%E4%B8%96%E7%95%8C&ie=utf-8&pn=150
正在爬第 20 页网页:https://tieba.baidu.com/f?kw=%E9%AD%94%E5%85%BD%E4%B8%96%E7%95%8C&ie=utf-8&pn=950
正在爬第 19 页网页:https://tieba.baidu.com/f?kw=%E9%AD%94%E5%85%BD%E4%B8%96%E7%95%8C&ie=utf-8&pn=900
正在爬第 21 页网页:https://tieba.baidu.com/f?kw=%E9%AD%94%E5%85%BD%E4%B8%96%E7%95%8C&ie=utf-8&pn=1000
正在爬第 22 页网页:https://tieba.baidu.com/f?kw=%E9%AD%94%E5%85%BD%E4%B8%96%E7%95%8C&ie=utf-8&pn=1050
正在爬第 23 页网页:https://tieba.baidu.com/f?kw=%E9%AD%94%E5%85%BD%E4%B8%96%E7%95%8C&ie=utf-8&pn=1100
正在爬第 24 页网页:https://tieba.baidu.com/f?kw=%E9%AD%94%E5%85%BD%E4%B8%96%E7%95%8C&ie=utf-8&pn=1150
正在爬第 25 页网页:https://tieba.baidu.com/f?kw=%E9%AD%94%E5%85%BD%E4%B8%96%E7%95%8C&ie=utf-8&pn=1200
正在爬第 26 页网页:https://tieba.baidu.com/f?kw=%E9%AD%94%E5%85%BD%E4%B8%96%E7%95%8C&ie=utf-8&pn=1250
正在爬第 30 页网页:https://tieba.baidu.com/f?kw=%E9%AD%94%E5%85%BD%E4%B8%96%E7%95%8C&ie=utf-8&pn=1450
正在爬第 28 页网页:https://tieba.baidu.com/f?kw=%E9%AD%94%E5%85%BD%E4%B8%96%E7%95%8C&ie=utf-8&pn=1350
正在爬第 29 页网页:https://tieba.baidu.com/f?kw=%E9%AD%94%E5%85%BD%E4%B8%96%E7%95%8C&ie=utf-8&pn=1400
正在爬第 2 页网页:https://tieba.baidu.com/f?kw=%E9%AD%94%E5%85%BD%E4%B8%96%E7%95%8C&ie=utf-8&pn=50
第8个页面爬取完成
第19个页面爬取完成
第28个页面爬取完成
第7个页面爬取完成
第10个页面爬取完成
第13个页面爬取完成
第29个页面爬取完成
第2个页面爬取完成
第24个页面爬取完成
第21个页面爬取完成
第22个页面爬取完成
第4个页面爬取完成
第17个页面爬取完成
第20个页面爬取完成
第23个页面爬取完成
第6个页面爬取完成
第3个页面爬取完成
第15个页面爬取完成
第1个页面爬取完成
第16个页面爬取完成
第12个页面爬取完成
第5个页面爬取完成
第18个页面爬取完成
第25个页面爬取完成
第30个页面爬取完成
第26个页面爬取完成
第11个页面爬取完成
第9个页面爬取完成
第14个页面爬取完成
第27个页面爬取完成
*/

猜你喜欢

转载自blog.csdn.net/weixin_40355471/article/details/115288381