Golang 爬虫-广度优先(获取html文档中的超链接)

Golang 爬虫-广度优先(获取html文档中的超链接),第1张

概述package mainimport( "fmt" "net/http" "io/ioutil" "regexp" "strings")var href_reg *regexp.Regexpvar hrefs_been_found map[string]intvar hrefs_undone []stringfunc get_all_h
package mainimport(    "fmt"    "net/http"    "io/IoUtil"    "regexp"    "strings")var href_reg *regexp.Regexpvar hrefs_been_found map[string]intvar hrefs_undone []stringfunc get_all_href(url string)([]string){    var ret [] string    resp,err := http.Get(url)    if err!=nil {        fmt.Println(err)        return ret    }    defer resp.Body.Close()    body,_ := IoUtil.ReadAll(resp.Body)        hrefs := href_reg.FindAllString(string(body),-1)        for _,v := range hrefs{        str := strings.Split(v,"\"")[1]                if len(str)<1{            continue        }        switch str[0]{        case ‘h‘:            ret = append(ret,str)           case ‘/‘:            if len(str)!=1 && str[1]==‘/‘{                ret = append(ret,"http:"+str)               }                        if len(str)!=1 && str[1]!=‘/‘{                ret = append(ret,url+str[1:])            }        default:            ret = append(ret,url+str)                    }            }    return ret}func init_global_var(){    href_pattern :=   "href=\"(.+?)\""    href_reg = regexp.MustCompile(href_pattern)    hrefs_been_found = make(map[string]int)}func is_href_been_found(href string)bool{    _,ok := hrefs_been_found[href]    return ok}func add_hrefs_to_undone_List(hrefs []string){    for _,value := range hrefs {        ok := is_href_been_found(value)        if !ok {            fmt.Printf("new url:(%s)\n",value);            hrefs_undone = append(hrefs_undone,value)            hrefs_been_found[value]=1        }else{            hrefs_been_found[value]++        }            }}func main(){    init_global_var()    var pos = 0    var urls = []string{"http://www.baIDu.com"}    add_hrefs_to_undone_List(urls)        for {        if pos >= len(hrefs_undone) {            break        }        url:= hrefs_undone[0]        hrefs_undone = hrefs_undone[1:]        hrefs := get_all_href(url)        add_hrefs_to_undone_List(hrefs)    }}
总结

以上是内存溢出为你收集整理的Golang 爬虫-广度优先(获取html文档中的超链接)全部内容,希望文章能够帮你解决Golang 爬虫-广度优先(获取html文档中的超链接)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1269035.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存