func process_kuaidaili() chan Proxy {
var wg1 sync.WaitGroup
result := make(result_list, 500)
index_url := "https://www.kuaidaili.com/free"
queue := make(task_list, 10) //change count
for i := 1; i <= 4; i++ {
queue <- index_url + "/inha/" + strconv.Itoa(i)
queue <- index_url + "/intr/" + strconv.Itoa(i)
}
fmt.Println(len(queue))
wg1.Add(len(queue))
for i := 0; i < len(queue); i++ {
go func() {
defer wg1.Done()
//request 函数传 channel 进去,取出一个 URL 发起请求
resp := request(queue, "www.kuaidaili.com")
defer resp.Body.Close()
defer fmt.Println("exit")
doc, _ := goquery.NewDocumentFromResponse(resp)
doc.Find("tr").Each(func(i int, contentSelection *goquery.Selection) {
_IP := contentSelection.Find("td").Eq(0).Text()
if reg_ip.Find([]byte(_IP)) != nil {
_Port := contentSelection.Find("td").Eq(1).Text()
_Anonymous := contentSelection.Find("td").Eq(2).Text()
if _Anonymous == "高匿名" {
_Anonymous = "1"
} else {
_Anonymous = "0"
}
_SSL := contentSelection.Find("td").Eq(3).Text()
if _SSL == "HTTPS" {
_SSL = "1"
} else {
_SSL = "0"
}
append_proxy := Proxy{
IP: _IP,
Port: _Port,
Anonymous: _Anonymous,
SSL: _SSL,
}
result <- append_proxy
fmt.Printf("-----%v------\n", len(result))
}
})
}()
}
wg1.Wait()
fmt.Println("return")
return result
}
main 函数调用
func main() {
fmt.Println("start")
aa := process_kuaidaili()
fmt.Println(len(aa))
}
程序阻塞,输出:
start
8
https://www.kuaidaili.com/free/inha/1
-----1------
-----2------
-----3------
-----4------
-----5------
-----6------
-----7------
-----8------
-----9------
-----10------
-----11------
-----12------
-----13------
-----14------
-----15------
exit
https://www.kuaidaili.com/free/intr/1
exit
https://www.kuaidaili.com/free/inha/2
exit
https://www.kuaidaili.com/free/intr/2
exit
--*--block here--*--
1
XxxxD 2018-08-05 15:18:00 +08:00
这是弄代理池么,不过我不懂 go, 路过
|
2
lcorange 2018-08-05 18:01:43 +08:00
--*--block here--*--这里会再往后会报错么?我没法运行你的代码,那几个网页我试了试,刷新太快是不会返回数据的。是不是中间发生了异常,defer wg1.Done() ,这句一直没法执行,一共是 8 个,看日志只消耗了 4 个,导致外部卡在 wg1.Wait() 上
|
3
myself659 2018-08-05 20:35:15 +08:00
chan result 在哪里有接收 ?
|
4
whoami9894 OP @XxxxD
是的 |
5
whoami9894 OP |
6
whoami9894 OP |
7
sunznx 2018-08-05 21:30:03 +08:00
```
for i := 0; i < len(queue); i++ { ``` 这里有 bug 吧,你 queue 是一直在减的,i = 4,len(queue) = 4 |
8
whoami9894 OP |
9
sunznx 2018-08-05 22:49:25 +08:00
@whoami9894 len(queue) 是一直在减少的
|
10
sagaxu 2018-08-05 22:54:44 +08:00 via Android
for i := 0; i < len(queue); i++
改为 qlen := len(queue) for i := 0; i < qlen; i++ |
11
whoami9894 OP |