千家信息网

如何使用Go秒爬博客园100页新闻

发表于:2024-11-26 作者:千家信息网编辑
千家信息网最后更新 2024年11月26日,这篇文章将为大家详细讲解有关如何使用Go秒爬博客园100页新闻,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。利用go语言的协程并发优势爬取网页速度相当之快,博客园1
千家信息网最后更新 2024年11月26日如何使用Go秒爬博客园100页新闻

这篇文章将为大家详细讲解有关如何使用Go秒爬博客园100页新闻,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

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

package mainimport ( "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秒爬博客园100页新闻"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

0