在这个练习中,我们将会使用 Go 的并发特性来并行化一个 Web 爬虫。
修改 Crawl
函数来并行地抓取 URL,并且保证不重复。
提示:你可以用一个 map 来缓存已经获取的 URL,但是要注意 map 本身并不是并发安全的!
初始
1 | package main |
要求实现并行抓取和不重复抓取
实现不重复抓取
make一个map用以实现url爬取记录即可
1 | package main |
实现并行抓取+不重复抓取
一.使用Mutex+WaitGroup
1 | package main |
二.使用通道channel
通道是go语言特性之一,coding时尽量利用好这个特性。笔者采用一个接收者多个发送者的方式,接收者阻塞在通道,发送者协程发送url,而直到所有发送者协程关闭,监测协程关闭通道,程序结束。
1 | package main |
注:本文仅为个人练习,不保证结果的准确及代码的简洁