同时访问网页,提取每个页面的标题,并将这些标题显示在终端中。这是使用 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中文网其他相关文章!