• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    Go语言实现的web爬虫实例

    本文实例讲述了Go语言实现的web爬虫方法。分享给大家供大家参考。具体分析如下:

    这里使用 Go 的并发特性来并行执行 web 爬虫。
    修改 Crawl 函数来并行的抓取 URLs,并且保证不重复。

    复制代码 代码如下:
    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语言程序设计有所帮助。

    您可能感兴趣的文章:
    • Go语言服务器开发实现最简单HTTP的GET与POST接口
    • 利用Go语言搭建WebSocket服务端方法示例
    • Go语言使用HTTP包创建WEB服务器的方法
    • 利用Go语言初步搭建一个web应用的教程
    • go语言实现通过FTP库自动上传web日志
    • Go语言实现简单Web服务器的方法
    • Go语言实现简单的一个静态WEB服务器
    • Go语言实现的一个简单Web服务器
    • 解决Golang在Web开发时前端莫名出现的空白换行
    • golang基于websocket实现的简易聊天室程序
    • Go语言Web编程实现Get和Post请求发送与解析的方法详解
    上一篇:Go语言中Select语句用法实例
    下一篇:Go语言中嵌入C语言的方法
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    Go语言实现的web爬虫实例 语言,实现,的,web,爬虫,实例,