Go语言如何实现并发爬虫(go语言,开发技术)

时间:2024-05-06 12:33:53 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

1. 单线程爬虫

定义一个用户

varClienthttp.Client

主函数

funcmain(){ url:="http://localhost:3000/api/v1/products" start:=time.Now() fori:=0;i<10;i++{ Spider(url,i) } elapsed:=time.Since(start) fmt.Printf("Time%s",elapsed)}

爬取函数

funcSpider(urlstring,iint){ reqSpider,err:=http.NewRequest("GET",url,nil) iferr!=nil{ log.Fatal(err) } reqSpider.Header.Set("content-length","0") reqSpider.Header.Set("accept","*/*") reqSpider.Header.Set("x-requested-with","XMLHttpRequest") respSpider,err:=Client.Do(reqSpider) iferr!=nil{ log.Fatal(err) } bodyText,_:=ioutil.ReadAll(respSpider.Body) varresultResult _=json.Unmarshal(bodyText,&result) fmt.Println(i,result.Data)}

运行时间为:651.8207ms

Go语言如何实现并发爬虫

2. 多线程爬虫

2.1 channel main函数

我们构造一个无缓冲的通道,来阻塞主进程,等待子进程的执行。

funcmain(){ url:="http://localhost:3000/api/v1/products" ch:=make(chanbool) start:=time.Now() fori:=0;i<10;i++{ goSpider(url,ch,i) } fori:=0;i<10;i++{ <-ch } elapsed:=time.Since(start) fmt.Printf("Time%s",elapsed)}

最后记得在爬虫的结束的时候,把值写入到通道中,不然会一直阻塞主进程

Go语言如何实现并发爬虫

运行时间:187.7921ms 比之前快了非常多。

Go语言如何实现并发爬虫

2.2 sync.WaitGroup

定义一个进程组并加10个进程

 varwgsync.WaitGroup wg.Add(10)

开辟十个goruntime

 fori:=0;i<10;i++{ gofunc(iint){ deferwg.Done() SpiderWaitGroup(url,i) }(i) }

阻塞主进程

wg.Wait()

结果:64.5246ms

Go语言如何实现并发爬虫

3. 源码地址

GitHub地址:https://github.com/CocaineCong/Go-Spider-Demo

 NormalStart(url)//单线程爬虫 ChannelStart(url)//Channel多线程爬虫 WaitGroupStart(url)//Wait多线程爬虫

其实多线程的两种都差不多的,只是有时候会因为机器的原因而导致一些误差。

Go语言如何实现并发爬虫

 </div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
本文:Go语言如何实现并发爬虫的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:css中小写变大写的代码怎么写下一篇:

20 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18