一个Go语言实现的web爬虫
发布时间:2020-12-16 09:39:06 所属栏目:大数据 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 package main import ( "fmt") type Fetcher interface { // Fetch 返回 URL 的 body 内容,并且将在这个页面上找到的 URL 放到一个 slice 中。 Fetch
以下代码由PHP站长网 52php.cn收集自互联网 现在PHP站长网小编把它分享给大家,仅供参考 package main import ( "fmt" ) type Fetcher interface { // Fetch 返回 URL 的 body 内容,并且将在这个页面上找到的 URL 放到一个 slice 中。 Fetch(url string) (body string,urls []string,err error) } // Crawl 使用 fetcher 从某个 URL 开始递归的爬取页面,直到达到最大深度。 func Crawl(url string,depth int,fetcher Fetcher) { // TODO: 并行的抓取 URL。 // TODO: 不重复抓取页面。 // 下面并没有实现上面两种情况: if depth <= 0 { return } body,urls,err := fetcher.Fetch(url) if err != nil { fmt.Println(err) return } fmt.Printf("found: %s %qn",url,body) for _,u := range urls { Crawl(u,depth-1,fetcher) } return } func main() { Crawl("http://golang.org/",4,fetcher) } // fakeFetcher 是返回若干结果的 Fetcher。 type fakeFetcher map[string]*fakeResult type fakeResult struct { body string urls []string } func (f *fakeFetcher) Fetch(url string) (string,[]string,error) { if res,ok := (*f)[url]; ok { return res.body,res.urls,nil } return "",nil,fmt.Errorf("not found: %s",url) } // fetcher 是填充后的 fakeFetcher。 var fetcher = &fakeFetcher{ "http://golang.org/": &fakeResult{ "The Go Programming Language",[]string{ "http://golang.org/pkg/","http://golang.org/cmd/",},"http://golang.org/pkg/": &fakeResult{ "Packages",[]string{ "http://golang.org/","http://golang.org/pkg/fmt/","http://golang.org/pkg/os/","http://golang.org/pkg/fmt/": &fakeResult{ "Package fmt","http://golang.org/pkg/","http://golang.org/pkg/os/": &fakeResult{ "Package os",} 以上内容由PHP站长网【52php.cn】收集整理供大家参考研究 如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |