Go语言使用goroutine来同时爬取多个网页

package main
import (
    "fmt"
    "net/http"
    "sync"
    "github.com/PuerkitoBio/goquery"
)
func main() {
    // 定义urls数组,包含要爬取的多个网页的URL
    urls := []string{
        "https://www.xp.cn/using.html",
        "https://www.xp.cn/advise.html",
        "https://www.xp.cn/bug.html",
    }
    // WaitGroup来等待所有的goroutine执行完毕
    var wg sync.WaitGroup
    for _, url := range urls {
        wg.Add(1)
        // 用goroutine来同时爬取这些网页
        go func(u string) {
            defer wg.Done()
            resp, err := http.Get(u)
            if err != nil {
                fmt.Println(err)
                return
            }
            defer resp.Body.Close()
            // 解析网页内容
            doc, err := goquery.NewDocumentFromReader(resp.Body)
            if err != nil {
                fmt.Println(err)
                return
            }
            // 获取标题
            doc.Find(".pb-20").Each(func(i int, s *goquery.Selection) {
                title := s.Find("li p a").Text()
                fmt.Printf("%s
", title)
            })
        }(url)
    }
    wg.Wait()
}

在实际应用中,我们还可以通过设置代理、使用cookie等方式来提高爬取效率和稳定性。

展开阅读全文

页面更新:2024-04-19

标签:网页   数组   稳定性   效率   定义   语言   方式   标题   内容

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top