Golang: 抓取網頁內容


今天寫個簡單的程序,根據指定的 URL 來抓取相應的網頁內容,然后存入本地文件。這個程序會涉及到網絡請求和文件操作等知識點,下面是實現代碼:

// fetch.go

package main

import (
    "os"
    "fmt"
    "net/http"
    "io/ioutil"
)

func main() {
    url := os.Args[1]

    // 根據URL獲取資源
    res, err := http.Get(url)

    if err != nil {
        fmt.Fprintf(os.Stderr, "fetch: %v\n", err)
        os.Exit(1)
    }

    // 讀取資源數據 body: []byte
    body, err := ioutil.ReadAll(res.Body)

    // 關閉資源流
    res.Body.Close()

    if err != nil {
        fmt.Fprintf(os.Stderr, "fetch: reading %s: %v\n", url, err)
        os.Exit(1)
    }

    // 控制台打印內容 以下兩種方法等同
    fmt.Printf("%s", body)
    fmt.Printf(string(body))

    // 寫入文件
    ioutil.WriteFile("site.txt", body, 0644)
}

上面的代碼中,我們引入了 net/http 網絡包,然后調用 http.Get(url) 方法獲取 URL 對應的資源,之后讀取出資源數據,然后在控制台打印,並將內容寫入到本地文件中。

需要注意的是,在讀取資源數據完畢后,應該及時將資源流關閉,避免出現內存資源的泄露。

另外,在處理異常時,我們使用了 fm.Fprintf() 這個方法,它是格式化三大方法之一:

  • Printf: 格式化字符串並輸出到 os.Stdout 中。
  • Fprintf: 格式化字符串並輸出到指定文件設備中,所以參數比 Printf 多一個文件指針 FILE*。
  • Sprintf: 格式化字符串並輸出到指定字符串中,所以參數比 Printf 多一個 char*,那就是目標字符串地址。

編譯后運行程序,並指定一個 URL 參數,這里暫時指定為百度吧,還是希望 Google 近期能夠回歸:

$ ./fetch http://www.baidu.com

運行完程序,在當前目錄中會生成一個 site.txt 文件。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM