濮阳杆衣贸易有限公司

主頁(yè) > 知識(shí)庫(kù) > Go語(yǔ)言實(shí)現(xiàn)的web爬蟲(chóng)實(shí)例

Go語(yǔ)言實(shí)現(xiàn)的web爬蟲(chóng)實(shí)例

熱門(mén)標(biāo)簽:智能營(yíng)銷軟件 旅游廁所如何電子地圖標(biāo)注 外呼系統(tǒng)多少錢(qián)一年 經(jīng)常接到推銷電話機(jī)器人的電話 客服級(jí)電銷機(jī)器人 滁州自建外呼系統(tǒng) 外呼系統(tǒng)如何接收服務(wù)密碼 工商信用卡外呼系統(tǒng)教程 海外照相館地圖標(biāo)注入駐

本文實(shí)例講述了Go語(yǔ)言實(shí)現(xiàn)的web爬蟲(chóng)方法。分享給大家供大家參考。具體分析如下:

這里使用 Go 的并發(fā)特性來(lái)并行執(zhí)行 web 爬蟲(chóng)。
修改 Crawl 函數(shù)來(lái)并行的抓取 URLs,并且保證不重復(fù)。

復(fù)制代碼 代碼如下:
package main
import (
    "fmt"
)
type Fetcher interface {
        // Fetch 返回 URL 的 body 內(nèi)容,并且將在這個(gè)頁(yè)面上找到的 URL 放到一個(gè) slice 中。
    Fetch(url string) (body string, urls []string, err error)
}
// Crawl 使用 fetcher 從某個(gè) URL 開(kāi)始遞歸的爬取頁(yè)面,直到達(dá)到最大深度。
func Crawl(url string, depth int, fetcher Fetcher) {
        // TODO: 并行的抓取 URL。
        // TODO: 不重復(fù)抓取頁(yè)面。
        // 下面并沒(méi)有實(shí)現(xiàn)上面兩種情況:
    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 是返回若干結(jié)果的 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/",
        },
    },
}

希望本文所述對(duì)大家的Go語(yǔ)言程序設(shè)計(jì)有所幫助。

您可能感興趣的文章:
  • Go語(yǔ)言服務(wù)器開(kāi)發(fā)實(shí)現(xiàn)最簡(jiǎn)單HTTP的GET與POST接口
  • 利用Go語(yǔ)言搭建WebSocket服務(wù)端方法示例
  • Go語(yǔ)言使用HTTP包創(chuàng)建WEB服務(wù)器的方法
  • 利用Go語(yǔ)言初步搭建一個(gè)web應(yīng)用的教程
  • go語(yǔ)言實(shí)現(xiàn)通過(guò)FTP庫(kù)自動(dòng)上傳web日志
  • Go語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單Web服務(wù)器的方法
  • Go語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單的一個(gè)靜態(tài)WEB服務(wù)器
  • Go語(yǔ)言實(shí)現(xiàn)的一個(gè)簡(jiǎn)單Web服務(wù)器
  • 解決Golang在Web開(kāi)發(fā)時(shí)前端莫名出現(xiàn)的空白換行
  • golang基于websocket實(shí)現(xiàn)的簡(jiǎn)易聊天室程序
  • Go語(yǔ)言Web編程實(shí)現(xiàn)Get和Post請(qǐng)求發(fā)送與解析的方法詳解

標(biāo)簽:運(yùn)城 喀什 楚雄 深圳 九江 晉城 湘潭 本溪

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Go語(yǔ)言實(shí)現(xiàn)的web爬蟲(chóng)實(shí)例》,本文關(guān)鍵詞  語(yǔ)言,實(shí)現(xiàn),的,web,爬蟲(chóng),實(shí)例,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Go語(yǔ)言實(shí)現(xiàn)的web爬蟲(chóng)實(shí)例》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于Go語(yǔ)言實(shí)現(xiàn)的web爬蟲(chóng)實(shí)例的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    正定县| 东明县| 浦城县| 龙陵县| 灵山县| 贵州省| 德江县| 大新县| 永安市| 宁德市| 陇南市| 张家川| 宣恩县| 永善县| 常山县| 策勒县| 平谷区| 七台河市| 阿合奇县| 从江县| 阳曲县| 龙川县| 保亭| 沁水县| 安溪县| 霞浦县| 固阳县| 营口市| 乌拉特后旗| 北京市| 措美县| 达日县| 龙里县| 湖南省| 宁河县| 普宁市| 修水县| 凤山市| 二连浩特市| 江永县| 榕江县|