zoukankan      html  css  js  c++  java
  • Golang: 模拟搜索引擎爬虫

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

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

  • 相关阅读:
    Evaluation
    Version
    bzoj4184-shallot
    jQuery 获取并设置 CSS 类
    jQuery 删除元素
    jQuery 添加元素
    jQuery 设置内容和属性
    jQuery
    jQuery Chaining
    CI 框架增加公用函数-如何使用Helper辅助函数
  • 原文地址:https://www.cnblogs.com/liuhe688/p/10922881.html
Copyright © 2011-2022 走看看