源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

Go语言实现的web爬虫实例

  • 时间:2022-01-24 17:24 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:Go语言实现的web爬虫实例
本文实例讲述了Go语言实现的web爬虫方法。分享给大家供大家参考。具体分析如下: 这里使用 Go 的并发特性来并行执行 web 爬虫。 修改 Crawl 函数来并行的抓取 URLs,并且保证不重复。
[u]复制代码[/u] 代码如下:
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 %q\n", 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/cmd/",             "http://golang.org/pkg/fmt/",             "http://golang.org/pkg/os/",         },     },     "http://golang.org/pkg/fmt/": &fakeResult{         "Package fmt",         []string{             "http://golang.org/",             "http://golang.org/pkg/",         },     },     "http://golang.org/pkg/os/": &fakeResult{         "Package os",         []string{             "http://golang.org/",             "http://golang.org/pkg/",         },     }, }
希望本文所述对大家的Go语言程序设计有所帮助。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部