最近网站需要针对百度做 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. VS中的Modules窗口

    当我在别人的机器上调试问题时,我做的第一件事就是查看modules窗口.按版本排序并看到一个不属于的dll可以帮助立即诊断配置问题,并节省许多调试痛苦. 下面介绍下各列的意思: Name:模块名称. ...

  2. Windows下ActiveMq安装与使用

    一.activeMq安装与启动 Apache Active MQ的官网 :http://activemq.apache.org/ 下载地址: http://activemq.apache.org/ac ...

  3. 通过rpm安装crontab

    可以在对应的虚拟机centos上查看 所安装的crontab安装信息,然后选中rpm包进行安装,命令:rpm -qa |grep cron 如: 如没有上述信息,表名没有安装,也可以直接用cronta ...

  4. Eclipse和Tomcat安装使用

    Tomcat 1.下载地址:http://tomcat.apache.org/ 可以选择安装版或者压缩包版本 解压后: |-bin: 存放tomcat的命令. catalina.bat 命令: sta ...

  5. es 内存占用优化

    对6.3: 修改Elasticsearch中JVM配置文件jvm.options: Dlog4j2.enable.threadlocals=false 注: 本文主要针对ES 2.x. “该给ES分配 ...

  6. exports与module.exports的区别,以及export与export.defult的区别

    在 JS 模块化编程的模块引入上, 主要有两种方式: CommonJS 模块标准 ES6 moduel 特性 1. CommonJS 模块引入:require() 模块导出:exports 或者 mo ...

  7. Python 2 代码转 Python 3的一些转化

    Python 2 代码转 Python 3的一些转化 1.“print X” 更改为“print(X)” 2.xrange改为range 3.m.itervalues() 改为 m.values() ...

  8. (转)解决mybatis的mapper.xml查询不出数据,结果一直为null问题

    背景:记录mybatis使用过程中遇到的相关问题. 解决mybatis的mapper.xml查询不出数据,结果一直为null问题 解决方案: 1 修改实体类与数据库字段名相同 2 修改sql查询语句, ...

  9. [转帖]什么是IOC(控制反转)、DI(依赖注入)

    什么是IOC(控制反转).DI(依赖注入) 2018-08-22 21:29:13 Ming339456 阅读数 20642   原文地址(摘要了部分内容):https://blog.csdn.net ...

  10. Java基础知识点总结(一)

    1.源文件声明规则2.JAVA基本类型void3.数据类型默认值4.自动类型转换5.Java变量类型6.Java局部变量7.访问控制修饰符8.父类与子类的访问控制9.instanceof运算符 1.源 ...