Web ページに同時にアクセスして、各ページのタイトルを抽出し、これらのタイトルを端末に表示します。これは 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 関数の終了時にこのタスク (ゴルーチン) を完了としてマークするようにプログラムに指示します。これは、メインがすべてのタスクがいつ完了したかを知るために重要です。
要求、エラー := http.Get(url)
if err != nil {
結果 <- fmt.Sprintf("%s へのアクセス中にエラーが発生しました: %v", url, err)
戻る
}
defer req.Body.Close()
if req.StatusCode != 200 {
results <- fmt.Sprintf("%s へのアクセス中にエラーが発生しました: ステータス %d %s", url, req.StatusCode, req.Status)
戻る
}
ドキュメント、エラー := goquery.NewDocumentFromReader(req.Body)
if err != nil {
results <- fmt.Sprintf("%s からのドキュメントの読み込みエラー: %v", url, err)
戻る
}
タイトル := doc.Find("タイトル").Text()
results <- fmt.Sprintf("%s のタイトル: %s", URL, title)
}
main 関数は、プログラムを構成および制御する main 関数です。
func main() {
URL := []string{
"http://olos.novagne.com.br/Olos/login.aspx?logout=true",
"http://sistema.novagne.com.br/novagne/",
}
var wg sync.WaitGroup
results := make(chan string, len(urls)) // 結果を保存するチャネル
for _, url := 範囲 URL {
wg.Add(1)
go fetchTitle(url, &wg, results)
}
wg.Wait()
閉じる(結果)
リポジトリ: https://github.com/ionnss/Scrapper-GoRoutine
イオン、
もう一つのアースデイ
以上がスクラッパーの競合他社の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。