Golang系列文章:抓取网页内容

Posted liuhe688

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
", 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
", 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系列文章:抓取网页内容的主要内容,如果未能解决你的问题,请参考以下文章

Golang系列文章:正则表达式

如何通过Java代码实现对网页数据进行指定抓取

R语言爬虫系列4|AJAX与动态网页介绍

再次遇到golang乱码问题,用simplifiedchinese解决

网页抓取 - 如何识别网页上的主要内容

Golang系列文章:读取并统计文件内容