Golang: 模拟搜索引擎爬虫
2024-09-02 06:52:51
最近网站需要针对百度做 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()
}
再次运行程序,文件和控制台将会同步输出内容。
最新文章
- 【代码笔记】iOS-正方形转换
- 一种更清晰的Android架构(转)
- IDEA Generating project in Batch mode
- 计算div里面li个数
- C++之map、list操作
- 使用 JavaScript 实现链表
- php学习笔记:文件的上传(包含设置文件的上传大小限制)
- linux tricks 之 container_of.
- Java的反射机制及应用实例
- adb server无法启动方法,结束占用端口的进程
- # C语言程序设计预备作业
- Android开发技巧——自定义控件之自定义属性
- getopts的使用
- windows server 2008 R2 Enterprise 间实时同步之FreeFileSync 部署过程
- 全民https时代,Let's Encrypt免费SSL证书的申请及使用(Tomcat版)
- php 1转成一
- Shell入门(一)
- Spring Boot - AMQP 消息中间件
- Python的日期函数datetime使用
- c# 抽象类 抽象函数 接口
热门文章
- ABP 报错 System.InvalidOperationException: 实例失败。
- 在Hadoop-3.1.2上安装HBase-2.2.1
- shell编程题(五)
- MOT19数据集百度云盘
- [转帖]grep -v、-e、-E
- ElasticSearch中碰到的C10K问题
- 【洛谷】P1478 陶陶摘苹果(升级版)-全AC题解
- 搭建zipkin并以mysql的方式存储数据
- 2d图片依次排列在屏幕中间(SpriteRenderer)
- prometheus重启hang住问题记录