今天闲的没事,就把以前写的一个爬虫,在看看有没有什么可以改进的地方。
看到有一个地方可以改进下,在爬取home页面数据后,获取页面数据,在分别开协程去请求。home页的请求很快大概有2W页每页有数据40条,再把40条数据分别请求,获取具体数据。但是home的请求很快,所需要的chan容量大,于是就想再写一个chan,没读完一页,再去请求下一页。
思路如下:
package main
/*交替打奇偶数
*/
import (
"fmt"
"sync"
)
var (
odd [] int
even [] int
chA = make(chan int, 1)
chB = make(chan int, 1)
wgx =sync.WaitGroup{}
)
func init() {
odd = make([]int, 0)
even = make([]int, 0)
for i := 0; i < 100; i++ {
if i%2 == 0 {
even = append(even, i)
continue
}
odd = append(odd, i)
}
}
func main() {
chA<-0
wgx.Add(2)
go pritEven();
go pritOdd();
wgx.Wait()
}
func pritEven() {
for _, v := range even {
<-chA
fmt.Println(v)
chB<-v
}
close(chB)
wgx.Done()
}
func pritOdd() {
for _, v := range odd {
<-chB
fmt.Println(v)
chA<-v
}
close(chA)
wgx.Done()
}