Golang福利爬虫

简介: 版权声明:本文可能为博主原创文章,若标明出处可随便转载。 https://blog.csdn.net/Jailman/article/details/81357563 没事的时候跑两把,穷人专用。
版权声明:本文可能为博主原创文章,若标明出处可随便转载。 https://blog.csdn.net/Jailman/article/details/81357563

没事的时候跑两把,穷人专用。

package main

import (
    "bytes"
    "fmt"
    "github.com/PuerkitoBio/goquery"
    "log"
    "math"
    "net/http"
    "runtime"
    "strconv"
    "strings"
    "sync"
    "time"
)

func Scraper(page string, now int64) string {
    // Request the HTML page.
    ScrapeURL := "https://51.ruyo.net/page/" + page
    client := &http.Client{}
    reqest, _ := http.NewRequest("GET", ScrapeURL, nil)
    reqest.Header.Set("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8")
    reqest.Header.Set("Accept-Charset", "GBK,utf-8;q=0.7,*;q=0.3")
    //reqest.Header.Set("Accept-Encoding", "gzip,deflate,sdch")
    reqest.Header.Set("Accept-Language", "zh-CN,zh;q=0.8")
    reqest.Header.Set("Cache-Control", "max-age=0")
    reqest.Header.Set("Connection", "keep-alive")
    reqest.Header.Set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.75 Safari/537.36")
    res, err := client.Do(reqest)
    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)
    }

    // Load the HTML document
    doc, err := goquery.NewDocumentFromReader(res.Body)
    if err != nil {
        log.Fatal(err)
    }

    // Find the review items
    var buffer bytes.Buffer
    buffer.WriteString("**********Scraped page " + page + "**********\n")
    doc.Find(".panel-body .entry-header").Each(func(i int, s *goquery.Selection) {
        // For each item found, get the band and title
        title := s.Find("h3").ChildrenFiltered("a").Text()
        url, _ := s.Find("h3").ChildrenFiltered("a").Attr("href")
        etime, _ := s.Find("div").ChildrenFiltered("time").Attr("datetime")
        etime = strings.Replace(etime, "+00:00", "", -1) + "Z"
        dt, _ := time.Parse(time.RFC3339, etime)
        intdt := dt.Unix()
        difftime := math.Abs(float64(now - intdt))
        //fmt.Println(now, intdt, difftime)
        if difftime <= 2592000 {
            buffer.WriteString("Review " + strconv.Itoa(i) + ": " + title + "\n" + url + "\n" + etime + "\n")
        }
    })
    return buffer.String()
}

func main() {
    runtime.GOMAXPROCS(runtime.NumCPU())
    now := time.Now().Unix()
    ch := make(chan string, 5)
    wg := &sync.WaitGroup{}
    var page string
    for i := 1; i < 6; i++ {
        wg.Add(1)
        go func(i int) {
            page = strconv.Itoa(i)
            fmt.Printf("Scraping page %s...\n", page)
            ch <- Scraper(page, now)
            wg.Done()
        }(i)
    }
    wg.Wait()

    //print result
    for i := 0; i < 6; i++ {
        fmt.Println(<-ch)
    }
}
目录
相关文章
|
6月前
|
数据采集 存储 Go
Golang爬虫代理接入的技术与实践
Golang爬虫代理接入的技术与实践
|
3月前
|
数据采集 Go 定位技术
使用go并发网络爬虫
使用go并发网络爬虫
|
11月前
|
数据采集 NoSQL 关系型数据库
Go语言网络爬虫工程经验分享:pholcus库演示抓取头条新闻的实例
网络爬虫是一种自动从互联网上获取数据的程序,它可以用于各种目的,如数据分析、信息检索、竞争情报等。网络爬虫的实现方式有很多,不同的编程语言和框架都有各自的优势和特点。在本文中,我将介绍一种使用Go语言和pholcus库的网络爬虫工程,以抓取头条新闻的数据为例,展示pholcus库的功能和用法。
947 0
Go语言网络爬虫工程经验分享:pholcus库演示抓取头条新闻的实例
|
数据采集 存储 JSON
猜谜游戏、彩云词典爬虫、SOCKS5代理的 Go(Golang) 小实践,附带全代码解释
猜谜游戏在编程语言实践都已经和 HelloWord 程序成为必不可少的新手实践环节,毕竟,它能够让我们基本熟悉 for 循环、变量定义、打印、if else 语句等等的使用,当我们基本熟悉该语言基础之后,就要学会其优势方面的程序实践,比如 Golang 所具备的爬虫及其并发优势。我们将采用彩云词典的英文单词翻译成中文的在线词典爬虫程序,及其改进版本,在并发上,我们将采用 SOCKS5 代理服务器的方式体验 Golang 语言的高并发易用性
92 0
猜谜游戏、彩云词典爬虫、SOCKS5代理的 Go(Golang) 小实践,附带全代码解释
|
数据采集 Go
Golang:colly 采用 Go 语言编写的 Web 爬虫框架
Golang:colly 采用 Go 语言编写的 Web 爬虫框架
162 0
Golang:colly 采用 Go 语言编写的 Web 爬虫框架
|
数据采集 数据挖掘 Go
非常好用的爬虫语言Go
如何使用go语言爬取数据
非常好用的爬虫语言Go
|
数据采集 存储 Go
Golang爬虫
示例爬去美女图
335 0
Golang爬虫
|
数据采集 JSON JavaScript
go语言实现网易云音乐爬虫
使用go语言简单实现网易云音乐爬虫
2837 0
|
Web App开发 数据采集 JavaScript
golang爬虫初体验
最近在学习golang,看网上很多人都喜欢爬豆瓣,今天我就写了一个golang版的爬虫。对于python爬虫,我很了解,什么dom树,js异步,爬虫技术栈都是没问题的。
2806 0