Go   发布时间:2022-04-09  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了[日常] Go语言圣经--并发的web爬虫大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

两种:

crawler.go 

Highlighter">

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 

Highlighter">

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,请注明来意。
标签: