Avec la popularité d'Internet, nous avons besoin d'obtenir une grande quantité d'informations, et une grande partie de celles-ci nous oblige à les explorer à partir du site Web. Il existe de nombreuses méthodes d'exploration, parmi lesquelles les robots écrits en Golang peuvent nous aider à obtenir ces informations plus efficacement.
golang est un langage de programmation intuitif, concis et efficace, adapté aux scénarios d'application à haute concurrence et hautes performances, et les robots d'exploration sont une tâche à haute concurrence et hautes performances, donc écrire des robots d'exploration en golang est très approprié. Dans cet article, nous présenterons le processus de base, les bibliothèques couramment utilisées et les technologies de base pour écrire des robots d'exploration dans Golang afin d'aider les débutants à maîtriser rapidement les méthodes de base des robots d'exploration Golang.
1. Étapes de base pour écrire des robots d'exploration en golang
Avant de présenter les étapes de base pour écrire des robots d'exploration en golang, nous devons comprendre la structure HTML de base.
Dans la bibliothèque standard de Golang, les fonctions associées aux requêtes HTTP ont été fournies. Il nous suffit de définir l'URL et la requête Avec. informations de base telles que les en-têtes, les cookies et les paramètres de requête, vous pouvez créer la requête HTTP dont vous avez besoin. Le code principal est le suivant :
package main import ( "fmt" "io/ioutil" "net/http" ) func main() { resp, err := http.Get("http://www.baidu.com") if err != nil { fmt.Println(err) return } defer resp.Body.Close() body, _ := ioutil.ReadAll(resp.Body) fmt.Println(string(body)) }
Ce code utilise la fonction http.Get pour lancer une requête HTTP et lire le corps de la réponse à partir de la réponse. Le point clé est l'instruction defer, qui sera exécutée à la fin de la fonction pour fermer le corps de la réponse et éviter les fuites de ressources.
Les données de réponse obtenues par la requête HTTP sont un document HTML, et nous devons l'analyser afin d'obtenir les données requises. En Golang, nous pouvons utiliser la bibliothèque GoQuery pour analyser des documents HTML. Cette bibliothèque est basée sur la syntaxe de jQuery et est facile à utiliser.
Les principales fonctions d'analyse fournies par GoQuery sont : Rechercher, Filtrer, Chacun, Attr, etc. La fonction Rechercher est utilisée pour rechercher les sous-éléments qui répondent aux critères, et la fonction Filtre est utilisée pour filtrer les éléments qui répondent aux critères. La fonction Each est utilisée pour parcourir tous les éléments qui remplissent les conditions, tandis que la fonction Attr est utilisée pour obtenir les attributs de l'élément. En prenant l'analyse de la page d'accueil de Baidu comme exemple, le code est le suivant :
package main import ( "fmt" "github.com/PuerkitoBio/goquery" "log" ) func main() { resp, err := http.Get("http://www.baidu.com") if err != nil { log.Fatal(err) } body := resp.Body defer body.Close() doc, err := goquery.NewDocumentFromReader(body) if err != nil { log.Fatal(err) } doc.Find("title").Each(func(i int, s *goquery.Selection) { fmt.Println(s.Text()) }) }
Dans le code ci-dessus, la fonction goquery.NewDocumentFromReader est utilisée pour construire l'objet document, puis l'élément titre est trouvé via la méthode Find, et tous les éléments qualificatifs sont parcourus via la méthode Each pour afficher son texte.
La dernière étape consiste à enregistrer les données obtenues. Pour le stockage des données, nous avons le choix entre de nombreuses méthodes, telles que des bases de données, des fichiers, des caches, etc.
Par exemple, nous souhaitons enregistrer les données analysées dans un fichier CSV. Les étapes sont les suivantes :
package main import ( "encoding/csv" "log" "os" ) func main() { file, err := os.Create("data.csv") if err != nil { log.Fatal(err) } defer file.Close() writer := csv.NewWriter(file) defer writer.Flush() writer.Write([]string{"name", "address", "tel"}) writer.Write([]string{"John Smith", "123 Main St, Los Angeles, CA 90012", "123-456-7890"}) writer.Write([]string{"Jane Smith", "456 Oak Ave, San Francisco, CA 94107", "123-456-7891"}) }
Le code ci-dessus utilise la fonction os.Create pour créer un. fichier nommé data csv, puis créez un écrivain CSV via la fonction csv.NewWriter. Enfin, nous écrivons les données à enregistrer dans le fichier CSV via la méthodewriter.Write.
2. Bibliothèques couramment utilisées pour écrire des robots d'exploration dans Golang
L'écriture de robots d'exploration dans Golang ne nécessite pas que vous écriviez vous-même beaucoup de code sous-jacent. Les bibliothèques de robots d'exploration courantes sont les suivantes :
package main import ( "fmt" "github.com/gocolly/colly" ) func main() { c := colly.NewCollector() c.OnHTML("head", func(e *colly.HTMLElement) { title := e.ChildText("title") fmt.Println(title) }) c.Visit("http://www.baidu.com") }
package main import ( "fmt" "github.com/sundy-li/go_commons/crawler" ) func main() { html := crawler.FetchHTML("http://www.baidu.com", "GET", nil, "") bs := crawler.NewSoup(html) title := bs.Find("title").Text() fmt.Println(title) }
package main import ( "fmt" "github.com/PuerkitoBio/goquery" "log" ) func main() { resp, err := http.Get("http://www.baidu.com") if err != nil { log.Fatal(err) } body := resp.Body defer body.Close() doc, err := goquery.NewDocumentFromReader(body) if err != nil { log.Fatal(err) } title := doc.Find("title").Text() fmt.Println(title) }
package main import ( "fmt" "github.com/gocolly/colly" ) func main() { urls := []string{ "http://www.baidu.com", "http://www.sogou.com", "http://www.google.com", } ch := make(chan string, len(urls)) for _, url := range urls { go func(url string) { c := colly.NewCollector() c.OnHTML("head", func(e *colly.HTMLElement) { title := e.ChildText("title") ch <- title }) c.Visit(url) }(url) } for range urls { title := <-ch fmt.Println(title) } }
package main import ( "fmt" "github.com/gocolly/colly" "time" ) func main() { c := colly.NewCollector() c.Limit(&colly.LimitRule{ DomainGlob: "*", Parallelism: 2, RandomDelay: 5 * time.Second, }) c.OnHTML("head", func(e *colly.HTMLElement) { title := e.ChildText("title") fmt.Println(title) }) c.Visit("http://www.baidu.com") }
L'exploration distribuée peut efficacement éviter d'être restreinte par les sites Web et améliorer l'efficacité de l'exploration. L'idée de base est d'attribuer différentes tâches à différents nœuds ou machines, de les traiter indépendamment et de résumer les résultats ensemble. L'exploration distribuée nécessite une planification, une communication et d'autres technologies, ce qui est relativement complexe. Dans les robots d'exploration réels, nous pouvons utiliser des bibliothèques tierces ou des services cloud pour mettre en œuvre une exploration distribuée.
Conclusion
Cet article explique comment utiliser Golang pour écrire un robot d'exploration, y compris les étapes de base, les bibliothèques communes et les technologies de base. Golang est un langage performant, concis et clair qui peut bien répondre aux besoins des robots. Cependant, dans la pratique de l'exploration, nous devons encore comprendre davantage de technologies et apprendre constamment de nouvelles technologies anti-exploration afin de mener à bien la tâche d'exploration.
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!