大佬教程收集整理的这篇文章主要介绍了[日常] Go语言圣经--并发的web爬虫,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
两种:
crawler.go
import (
"fmt"
"links"
//"log"
"os"
)
func main() {
worklist := make(chan []string)
// Start with the command-line arguments.
go func() { worklist <- os.Args[1:] }()
// Crawl the web concurrently.
seen := make(map[string]bool)
for list := range worklist {
for _,link := range list {
if !seen[link] {
seen[link] = true
go func(link string) {
worklist <- crawl(link)
}(link)
}
}
}
}
var tokens = make(chan struct{},20)
//从一个url页面中提取出所有的url
func crawl(url String) []String {
fmt.Println(url)
tokens <- struct{}{}
list,err := links.Extract(url)
<-tokens
if err != nil {
//log.Print(err)
}
return list
}
crawler2.go
import (
"fmt"
"links"
//"log"
"os"
"strings"
)
func main() {
worklist := make(chan []string)
unseenLinks := make(chan string)
// Start with the command-line arguments.
go func() { worklist <- os.Args[1:] }()
// Create 20 crawler goroutines to fetch each unseen link.
for i := 0; i < 20; i++ {
go func() {
for link := range unseenLinks {
//if strings.HasPrefix(link,"http://www.lypeng.com") {
foundLinks := crawl(link)
go func() { worklist <- foundLinks }()
//}
}
}()
}
// The main goroutine de-duplicates worklist items
// and sends the unseen ones to the crawlers.
seen := make(map[string]bool)
for list := range worklist {
for _,link := range list {
if !seen[link] {
seen[link] = true
unseenLinks <- link
}
}
}
}
//从一个url页面中提取出所有的url
func crawl(url String) []String {
fmt.Println(url)
list,err := links.Extract(url)
if err != nil {
//log.Print(err)
}
return list
}
以上是大佬教程为你收集整理的[日常] Go语言圣经--并发的web爬虫全部内容,希望文章能够帮你解决[日常] Go语言圣经--并发的web爬虫所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。