今天写个简单的程序,根据指定的 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 文件。

最新文章

  1. .NET Core 1.0.1 升级汇总
  2. IOS中的编码规范
  3. CSS3 background-size图片自适应
  4. (原)Matlab的svmtrain和svmclassify
  5. python3.5之string
  6. 开源搜索引擎评估:lucene sphinx elasticsearch
  7. Allowed memory size of 134217728 bytes exhausted
  8. OSI(Open System Interconnect) 网络七层协议
  9. IBeacon协议分析
  10. 使用 urllib 进行身份验证
  11. 【 转】__try,__except,__finally,__leave异常模型机制
  12. 解决SQL Server管理器无法连接远程数据库的问题(转)
  13. Linux基础命令---bzmore
  14. Java质数求解
  15. iOS开发-多线程NSOperation和NSOperationQueue
  16. fusionjs uber开源的通用web插件化开发框架
  17. Android 线程池的类型、区别以及为何要用线程池
  18. 解决非controller使用,@Autowired或者@Resource注解注入Mapper接口为null的问题
  19. win7如何安装maven、安装protoc
  20. 您需要售后返修管理软件的N个理由

热门文章

  1. Babel7 转码
  2. 6-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案安全篇(Wi-Fi模块SSL连接MQTT)
  3. 网络协议 8 - TCP协议(上)
  4. Python 和 Flask 设计 RESTful API
  5. 抓住九月的尾巴分享一个插件XLSX
  6. IDEA Gradle配置与使用
  7. java 查找指定包下的类
  8. Spring Cloud OkHttp设计原理
  9. spring 事件使用
  10. 模拟 + 暴搜 --- Help Me with the Game