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--*--
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.