最近网站需要针对百度做 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()
}

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

Golang: 模拟搜索引擎爬虫的更多相关文章

  1. Java开发搜索引擎爬虫

    package com.peidon.html; import java.io.BufferedReader; import java.io.File; import java.io.FileOutp ...

  2. 搜索引擎爬虫蜘蛛的USERAGENT大全

    搜索引擎爬虫蜘蛛的USERAGENT大全 搜索引擎爬虫蜘蛛的USERAGENT收集,方便制作采集的朋友.   百度爬虫 * Baiduspider+(+http://www.baidu.com/sea ...

  3. google搜索引擎爬虫爬网站原理

    google搜索引擎爬虫爬网站原理 一.总结 一句话总结:从几个大站开始,然后开始爬,根据页面中的link,不断爬 从几个大站开始,然后开始爬,根据页面中的link,不断加深爬 1.搜索引擎和数据库检 ...

  4. golang实现并发爬虫三(用队列调度器实现)

    欲看此文,必先可先看: golang实现并发爬虫一(单任务版本爬虫功能) gollang实现并发爬虫二(简单调度器) 上文中的用简单的调度器实现了并发爬虫. 并且,也提到了这种并发爬虫的实现可以提高爬 ...

  5. Golang模拟用户登陆,突破教务系统

    目录 一.Golang模拟用户登陆,突破教务系统 1.1 请求登陆页面 1.2 抓包分析登陆请求 1.3 golang使用js引擎合成salt 1.4 模拟表单提交,完成登陆 1.5 进入成绩查询页, ...

  6. 微信朋友圈转疯了(golang写小爬虫抓取朋友圈文章)

    很多人在朋友圈里转发一些文章,标题都是什么转疯啦之类,虽然大多都也是广告啦,我觉得还蛮无聊的,但是的确是有一些文章是非常值得收藏的,比如老婆经常就会收藏一些养生和美容的文章在微信里看. 今天就突发奇想 ...

  7. golang模拟动态高优先权优先调度算法

    实验二  动态高优先权优先调度 实验内容 模拟实现动态高优先权优先(若数值越大优先权越高,每运行一个时间单位优先权-n,若数值越小优先权越高,没运行一个时间单位优先权+n),具体如下: 设置进程体:进 ...

  8. 如何使用robots禁止各大搜索引擎爬虫爬取网站

    ps:由于公司网站配置的测试环境被百度爬虫抓取,干扰了线上正常环境的使用,刚好看到每次搜索淘宝时,都会有一句由于robots.txt文件存在限制指令无法提供内容描述,于是便去学习了一波 1.原来一般来 ...

  9. golang实现并发爬虫一(单任务版本爬虫功能)

    目的是写一个golang并发爬虫版本的演化过程. 那么在演化之前,当然是先跑通一下单任务版本的架构. 正如人走路之前是一定要学会爬走一般. 首先看一下单任务版本的爬虫架构,如下: 这是单任务版本爬虫的 ...

随机推荐

  1. maker使用说明书

    1.以自带的示例数据为例 dpp_contig.fasta dpp_est.fasta dpp_protein.fasta te_proteins.fasta 2.生成控制文件 控制文件是特定于运行的 ...

  2. 洛谷P1578 奶牛牧场(悬线法思想)

    题目 悬线法的思想--即扫描线的思想,每个矩阵必定是由两个障碍来构成左右边界或者上下边界. 如果此两个障碍组成了左右边界,枚举这两个障碍中途更新这两个障碍之间的矩阵上下边界,并且更新最大值. 考虑如何 ...

  3. c04--数组

    0.展示PTA总分 1.本章学习内容总结 1.1学习内容总结 数组查找: 1.遍历法查找:从头遍历数组找对应数据. 2.二分法查找:适用于按顺序排列的整形数组. 插入数据: 先找到该数据,对数组进行移 ...

  4. pytorch指定使用的单个GPU

    1.pycharm里直接在代码中加入下面 import os os.environ["CUDA_VISIBLE_DEVICES"] = "2" 2.在终端指定使 ...

  5. JS 数组,对象常用方法 集合

    数组 1.数组去重:   主要是使用的 new Set() 方法     https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Referen ...

  6. 理解UnrealBuildTool

    转自:https://zhuanlan.zhihu.com/p/57186557 介绍 虚幻引擎是当前比较流行的游戏开发引擎之一,许多流行的游戏都是虚幻引擎开发的. 然而“引擎”这个词在行业中的定义比 ...

  7. Maven 教程(13)— Maven插件解析运行机制

    原文地址:https://blog.csdn.net/liupeifeng3514/article/details/79551210 这里给大家详细说一下Maven的运行机制,让大家不仅知其然,更知其 ...

  8. Flume的Source、Sink总结,及常用使用场景

    数据源Source RPC异构流数据交换 Avro Source Thrift Source 文件或目录变化监听 Exec Source Spooling Directory Source Taild ...

  9. Python 发送邮件 and 编辑Excel

    记录一下Python 发送邮件的代码,这是半年前写的,不知道现在有什么类库的改动. 类库 import smtplib from email.mime.text import MIMEText fro ...

  10. centos7下vs code编辑器字体与windows版本同步设置-安装中文字体,美化vscode

    "editor.fontFamily": "Consolas, 'Courier New', monospace" 从window10系统中复制出以上字体,到C ...