最近网站需要针对百度做 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. 关于DML的一些使用

    DML是一种非常简单的标记语言,它帮助基于现有命令的输出发现和执行新命令.许多WinDbg命令(以及扩展命令)都支持DML.例如,下面是lm D命令,它显示DML输出: 在上面的命令输出中,当我单击“ ...

  2. ESA2GJK1DH1K基础篇: 测试APP使用SmartConfig绑定Wi-Fi 设备并控制设备

    前言 实现功能概要 STM32控制WI-Fi模块以AT指令TCP透传方式连接MQTT服务器, 实现MQTT通信控制. 测试准备工作(详细下载步骤请参考 硬件使用说明 ) 一,下载单片机程序 二,安装A ...

  3. Spring注解和标签的比较说明

    待完善.... xml标签 注解 说明 xml的Spring约束头 @Configuration xml约束头表明这是用于spring的的配置文件 @Configuration注解表情这是用于Spri ...

  4. Sql Server 数据库出现“可疑”的解决办法

    问题:数据库名称出现“可疑”字样 解决: 方法一: 重新还原数据库 方法二: 贴上语句:(DB_CS:你的数据库名) 第一步: ALTER DATABASE DB_CS SET EMERGENCY 第 ...

  5. .net core 使用本地包

    环境:.net core 2.2 类库:.Net  Standard 2.0 旧版本:   发布你自己的Nuget包 如果不想把包发布到nuget上面供别人引用,然后你有没有服务器,我们只能使用本地包 ...

  6. 《Linux就该这么学》培训笔记_ch19_使用PXE+Kickstart无人值守安装服务

    <Linux就该这么学>培训笔记_ch19_使用PXE+Kickstart无人值守安装服务 文章最后会post上书本的笔记照片. 文章主要内容: 无人值守系统 部署相关服务程序 配置DHC ...

  7. jquery swipper插件的一些弊端

    jquery swipper插件的一些弊端touch触摸机制是swipper的 阻止click冒泡.拖动Swiper时阻止click事件.下面这个方法或许可以解决触摸机制的问题 <pre> ...

  8. adb和fastboot的使用

    1.前言 随着Android系统的普及,ADB(Android Debug Bridge)逐渐成了Android设备调试的必不可少的一种重要工具,该工具可以完成多种功能,例如跟踪系统日志,上传或下载文 ...

  9. vim文本编辑器的使用

    1.简介 vim是vi发展过来的一款文本编辑器,功能非常强大. 2.vim的工作模式 vim有三种工作模式,分别为命令模式.编辑模式.末行模式: 1)命令模式:打开文件之后,默认进入命令模式: 2)编 ...

  10. Ansible13:Playbook循环语句

    目录 循环语句 简介 loop关键字说明 在循环语句中注册变量 旧循环语句 1. with_items 2. with_nested 3. with_dict 4. with_fileglob 5. ...