go語言 goquery爬蟲


 

  goquery 類似ruby的gem nokogiri

  goquery的選擇器功能很強大,很好用。地址:https://github.com/PuerkitoBio/goquery

 

  這是一個糗百首頁的爬蟲程序

package main

import (
    "fmt"
    "log"
    "net/http"
    "strings"

    "github.com/PuerkitoBio/goquery"
)

func qiubai_parse() {
    res, err := http.Get("https://www.qiushibaike.com/hot/")
    if err != nil {
        log.Fatal(err)
    }
    defer res.Body.Close()
    if res.StatusCode != 200 {
        log.Fatalf("status code error: %d %s", res.StatusCode, res.Status)
    }

    doc, err := goquery.NewDocumentFromReader(res.Body)
    if err != nil {
        log.Fatal(err)
    }

    array := make([]map[string]string, 100)
    doc.Find("#content-left .article ").Each(func(i int, s *goquery.Selection) {
        hash := make(map[string]string)
        url, _ := s.Find("a[class]").Attr("href")
        hash["link"] = "https://www.qiushibaike.com" + url
        sub_res, _ := http.Get(hash["link"])
        sub_doc, _ := goquery.NewDocumentFromReader(sub_res.Body)
        hash["all_content"] = sub_doc.Find(".content").Text()
        like_num := s.Find(".likenum").Text()
        hash["like_num"] = strings.Replace(like_num, " ", "", -1)
        comment := s.Find(".main-text").Text()
        hash["comment"] = strings.Replace(comment, like_num, "", -1)
        fmt.Println(hash)
        array = append(array, hash)
    })
    fmt.Println(array)
}

func main() {
    qiubai_parse()
}

 

  


免責聲明!

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



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