今天写个简单的程序,根据指定的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
文件。
原文地址:https://www.cnblogs.com/liuhe688/p/9597749.html
时间: 2024-11-02 06:08:37