• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    Go秒爬博客园100页新闻

    利用go语言的协程并发优势爬取网页速度相当之快,博客园100页新闻标题只需一秒即可全部爬取

    package main
    
    import (
     "bytes"
     "fmt"
     "github.com/PuerkitoBio/goquery"
     "log"
     "net/http"
     "runtime"
     "strconv"
     "sync"
    )
    
    func Scraper(page string) string {
     // Request the HTML page.
     ScrapeURL := "https://news.cnblogs.com/n/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(".content .news_entry").Each(func(i int, s *goquery.Selection) {
      // For each item found, get the band and title
      title := s.Find("a").Text()
      url, _ := s.Find("a").Attr("href")
      buffer.WriteString("Review " + strconv.Itoa(i) + ": " + title + "\nhttps://news.cnblogs.com" + url + "\n")
     })
     return buffer.String()
    }
    
    func main() {
     runtime.GOMAXPROCS(runtime.NumCPU())
     ch := make(chan string, 100)
     wg := sync.WaitGroup{}
     var page string
     for i := 1; i  101; i++ {
      wg.Add(1)
      go func(i int) {
       page = strconv.Itoa(i)
       fmt.Printf("Scraping page %s...\n", page)
       ch - Scraper(page)
       wg.Done()
      }(i)
     }
     wg.Wait()
    
     //print result
     for i := 0; i  101; i++ {
      fmt.Println(-ch)
     }
    }

    总结
    以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。如果你想了解更多相关内容请查看下面相关链接

    您可能感兴趣的文章:
    • Go语言的http/2服务器功能及客户端使用
    • Golang中定时器的陷阱详解
    • golang设置http response响应头与填坑记录
    • Golang如何交叉编译各个平台的二进制文件详解
    • 详解Golang实现http重定向https的方式
    • 详解如何热重启golang服务器
    • golang利用不到20行代码实现路由调度详解
    • golang中命令行库cobra的使用方法示例
    上一篇:golang实现分页算法实例代码
    下一篇:golang flag简单用法
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    Go秒爬博客园100页新闻 秒爬,博客园,100页,新闻,