Go语言高并发版爬取百度贴吧内容

本文介绍如何利用Go语言的高并发特性进行百度贴吧内容的高效爬取。通过并发爬取网页,显著提升了数据抓取速度。文章详细展示了爬虫程序的实现代码,包括网页内容读取、文件写入及并发工作流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上一节:爬取百度贴吧内容

go语言的优势在于可以高并发的爬取数据,实现如下:

程序代码:

package main

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

//并发爬取网页内容
func ConHttpGet(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, err := 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 := "https://tieba.baidu.com/f?kw=王者荣耀&ie=utf-8&cid=&tab=corearea&pn=" +
	//将页面值转换为字符串类型((i-1)*50是int类型)
		strconv.Itoa((i-1)*50)
	fmt.Println("正在爬取第%d页", i)

	//2)爬  (将所有的网站内容全部爬下来)
	result, err := ConHttpGet(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 ConDoWork(start, end int) {
	fmt.Printf("正在爬取%d到%d的页面", start, end)
	fmt.Println()

	//使用管道
	page := make(chan int)
	//明确目标(要知道你准备在哪个范围或者网站上搜索)
	//https://tieba.baidu.com/f?kw=王者荣耀&ie=utf-8&cid=&tab=corearea&pn=0    //下一页要+50
	//迭代爬取内容
	for i := start; i <= end; i++ {
		//go 一个进程
		go SpiderPage(i, page)
	}
	for i := start; i <= end; i++ {
		fmt.Printf("第%d个页面爬取完成\n", <-page)
	}
}

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

	ConDoWork(start,end)
}

运行结果:

很明显,相比于上一节的简单爬取数据,爬取的速度有很大的提升,可以同时运行两个程序来比较爬取速度。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值