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()
}

再次運行程序,文件和控制台將會同步輸出內容。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM