加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

一个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】收集整理供大家参考研究

如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读