Maison  >  Article  >  développement back-end  >  Créez des robots d'exploration simultanés hautes performances à l'aide de Go et Goroutines

Créez des robots d'exploration simultanés hautes performances à l'aide de Go et Goroutines

WBOY
WBOYoriginal
2023-07-21 20:03:29716parcourir

Utilisez Go et Goroutines pour créer des robots d'exploration simultanés hautes performances

À l'ère d'Internet d'aujourd'hui, l'information explose et une grande quantité de contenu Web est disponible pour que nous puissions la parcourir. Pour les développeurs, obtenir ces informations et effectuer une analyse plus approfondie est une tâche importante. Et les robots d’exploration sont les outils utilisés pour atteindre cet objectif. Cet article explique comment utiliser le langage Go et Goroutines pour créer des robots d'exploration simultanés hautes performances.

Le langage Go est un langage de programmation open source développé par Google. Il est connu pour sa syntaxe minimaliste et ses performances puissantes. Les Goroutines sont un thread léger dans le langage Go qui peut être utilisé pour implémenter des opérations simultanées.

Avant de commencer à écrire le robot, nous devons préparer deux bibliothèques nécessaires : net/http et golang.org/x/net/html. Le premier est utilisé pour envoyer des requêtes HTTP et recevoir des réponses HTTP, et le second est utilisé pour analyser les documents HTML. net/httpgolang.org/x/net/html。前者用于发送HTTP请求和接收HTTP响应,后者用于解析HTML文档。

下面是一个简单的示例,演示了如何使用Go和Goroutines来编写一个并发爬虫:

package main

import (
    "fmt"
    "net/http"
    "golang.org/x/net/html"
)

func main() {
    urls := []string{
        "https://www.example.com/page1",
        "https://www.example.com/page2",
        "https://www.example.com/page3",
    }

    results := make(chan string)

    for _, url := range urls {
        go func(url string) {
            body, err := fetch(url)
            if err != nil {
                fmt.Println(err)
                return
            }

            links := extractLinks(body)
            for _, link := range links {
                results <- link
            }
        }(url)
    }

    for i := 0; i < len(urls); i++ {
        fmt.Println(<-results)
    }
}

func fetch(url string) (string, error) {
    resp, err := http.Get(url)
    if err != nil {
        return "", err
    }
    defer resp.Body.Close()

    body, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        return "", err
    }

    return string(body), nil
}

func extractLinks(body string) []string {
    links := []string{}
    doc, err := html.Parse(strings.NewReader(body))
    if err != nil {
        return links
    }

    var extract func(*html.Node)
    extract = func(n *html.Node) {
        if n.Type == html.ElementNode && n.Data == "a" {
            for _, attr := range n.Attr {
                if attr.Key == "href" {
                    links = append(links, attr.Val)
                    break
                }
            }
        }

        for c := n.FirstChild; c != nil; c = c.NextSibling {
            extract(c)
        }
    }

    extract(doc)
    return links
}

在上面的代码中,我们首先定义了一个urls数组,其中包含了我们要爬取的网页URL。然后,我们创建了一个results通道,用于存放爬取结果。

接下来,我们使用for循环迭代urls数组中的每个URL。在每次循环中,我们都使用go关键字来创建一个Goroutine,去并发地爬取指定的URL。在Goroutine中,我们首先调用fetch函数来发送HTTP请求并获取响应的HTML内容。之后,我们根据HTML内容调用extractLinks函数,提取其中的链接,并将它们发送到results通道中。

最后,我们使用一个for循环来从results

Voici un exemple simple qui montre comment utiliser Go et Goroutines pour écrire un robot d'exploration simultané :

rrreee

Dans le code ci-dessus, nous définissons d'abord un tableau urls qui contient notre URL du Web page à explorer. Ensuite, nous avons créé un canal results pour stocker les résultats de l'exploration.

Ensuite, nous utilisons une boucle for pour parcourir chaque URL du tableau urls. Dans chaque boucle, nous utilisons le mot-clé go pour créer une Goroutine afin d'explorer simultanément l'URL spécifiée. Dans Goroutine, nous appelons d'abord la fonction fetch pour envoyer une requête HTTP et obtenir le contenu HTML de la réponse. Ensuite, nous appelons la fonction extractLinks basée sur le contenu HTML, extrayons les liens et les envoyons au canal results. 🎜🎜Enfin, nous utilisons une boucle for pour recevoir les résultats du crawl du canal results et les imprimer. 🎜🎜En utilisant Goroutines, nous pouvons envoyer plusieurs requêtes HTTP simultanément, améliorant ainsi les performances du robot d'exploration. De plus, les opérations gourmandes en E/S telles que les requêtes HTTP et l'analyse HTML peuvent être gérées efficacement à l'aide de Goroutines. 🎜🎜Pour résumer, cet article explique comment utiliser le langage Go et Goroutines pour créer un robot d'exploration simultané hautes performances. En utilisant correctement les mécanismes de concurrence, nous pouvons obtenir et analyser les informations sur Internet plus efficacement. J'espère que les lecteurs pourront comprendre et maîtriser comment utiliser le langage Go pour écrire des robots d'exploration simultanés hautes performances grâce au contenu de cet article. 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn