分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 软件开发

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

发布时间:2023-09-06 02:28责任编辑:熊小新关键词:爬虫
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文档中的超链接)

原文地址:https://www.cnblogs.com/r1ng0/p/10202418.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved