最近网站需要针对百度做 SEO 优化,用 Go 语言写了个测试程序,模拟一下百度的爬虫,看看返回的内容是否正确。

代码很简单,就是发送一个请求,把百度相关的信息放入请求头中即可,代码如下:

package main

import (
"io/ioutil"
"net/http"
) func main() {
// 这里用简化的UA 访问百度自己
const (
url = "https://www.baidu.com"
userAgent = "Mozilla/5.0 Baiduspider/2.0"
) // 创建client 参数为默认
client := &http.Client{} // 创建请求
req, _ := http.NewRequest("GET", url, nil) // 在请求头中添加指定的UA
req.Header.Add("User-Agent", userAgent) // 发起请求并返回结果
res, _ := client.Do(req) // 读取资源数据
body, _ := ioutil.ReadAll(res.Body) // 写入文件
ioutil.WriteFile("source.txt", body, 0644) res.Body.Close()
}

运行完上面的程序,会在当前目录下,生成一个 source.txt 文件,内容即抓取过来的网页源代码。

有时候,我们希望程序在写文件的同时,同步输出到控制台,对于这种场景,可以试试下面这种方式:

package main

import (
"fmt"
"io"
"net/http"
"os"
) func main() {
const (
url = "https://www.baidu.com"
userAgent = "Mozilla/5.0 Baiduspider/2.0"
) // 创建client 参数为默认
client := &http.Client{} // 创建请求
req, _ := http.NewRequest("GET", url, nil) // 在请求头中添加指定的UA
req.Header.Add("User-Agent", userAgent) // 发起请求并返回结果
res, _ := client.Do(req) // 获取响应体
body := res.Body // 创建文件 用以保存响应内容
file, _ := os.Create("source.txt") // 创建一个MultiWriter 会同时写到标准输出和操作系统文件
dest := io.MultiWriter(os.Stdout, file) // 将响应内容复制到MultiWriter每个目标 返回总的字节数
bytes, _ := io.Copy(dest, body) // 打印内容总的字节数
fmt.Println("total bytes:", bytes) // 关闭资源
body.Close()
file.Close()
}

再次运行程序,文件和控制台将会同步输出内容。

最新文章

  1. 【代码笔记】iOS-正方形转换
  2. 一种更清晰的Android架构(转)
  3. IDEA Generating project in Batch mode
  4. 计算div里面li个数
  5. C++之map、list操作
  6. 使用 JavaScript 实现链表
  7. php学习笔记:文件的上传(包含设置文件的上传大小限制)
  8. linux tricks 之 container_of.
  9. Java的反射机制及应用实例
  10. adb server无法启动方法,结束占用端口的进程
  11. # C语言程序设计预备作业
  12. Android开发技巧——自定义控件之自定义属性
  13. getopts的使用
  14. windows server 2008 R2 Enterprise 间实时同步之FreeFileSync 部署过程
  15. 全民https时代,Let's Encrypt免费SSL证书的申请及使用(Tomcat版)
  16. php 1转成一
  17. Shell入门(一)
  18. Spring Boot - AMQP 消息中间件
  19. Python的日期函数datetime使用
  20. c# 抽象类 抽象函数 接口

热门文章

  1. ABP 报错 System.InvalidOperationException: 实例失败。
  2. 在Hadoop-3.1.2上安装HBase-2.2.1
  3. shell编程题(五)
  4. MOT19数据集百度云盘
  5. [转帖]grep -v、-e、-E
  6. ElasticSearch中碰到的C10K问题
  7. 【洛谷】P1478 陶陶摘苹果(升级版)-全AC题解
  8. 搭建zipkin并以mysql的方式存储数据
  9. 2d图片依次排列在屏幕中间(SpriteRenderer)
  10. prometheus重启hang住问题记录