Golang系列文章:抓取網頁內容

來源:互聯網
上載者:User

標籤:code   輸出   方法   ring   檔案   http   efi   根據   stderr   

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

// fetch.gopackage mainimport (    "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檔案。

Golang系列文章:抓取網頁內容

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.