同時造訪網頁,擷取每個頁面的標題,並將這些標題顯示在終端機中。這是使用 Go 中的並發性完成的,它允許您同時訪問多個頁面,從而節省時間。
import ( "fmt" "net/http" "sync" "github.com/PuerkitoBio/goquery" )
角色負責:
func fetchTitle(url string, wg *sync.WaitGroup, results chan<- string) { defer wg.Done() // Marca a goroutine como concluída no WaitGroup
函數參數:
defer wg.Done() 行告訴程式在 fetchTitle 函數完成時將此任務(goroutine)標記為已完成。這很重要,以便 main 知道所有任務何時完成。
請求,錯誤:= http.Get(url)
if err != nil {
結果
返回
}
延遲 req.Body.Close()
if req.StatusCode != 200 {
results
返回
}
doc, err := goquery.NewDocumentFromReader(req.Body)
if err != nil {
results
返回
}
標題 := doc.Find("標題").Text()
結果
}
main函數是設定和控製程式的主函數。
func main() {
url := []字串{
"http://olos.novagne.com.br/Olos/login.aspx?logout=true",
“http://sistema.novagne.com.br/novagne/”,
}
var wgsync.WaitGroup
results := make(chan string, len(urls)) // 儲存結果的通道
對於 _, url := 範圍 url {
wg.Add(1)
去 fetchTitle(url, &wg, 結果)
}
wg.Wait()
關閉(結果)
回購:https://github.com/ionnss/Scrapper-GoRoutine
離子,
又一個地球日
以上是刮刀競爭對手的詳細內容。更多資訊請關注PHP中文網其他相關文章!