


Explication détaillée de la façon d'utiliser Golang pour explorer les fonds d'écran Bing
Inutile de dire qu'il suffit d'utiliser Python pour créer un robot. Une seule requête
peut prendre soin du monde. Cependant, j'ai entendu dire que le package http
intégré à golang est très puissant. Même si je n'ai aucun travail à faire, je veux juste apprendre de nouvelles choses et revoir les points de connaissances liés à cela. la requête et la réponse du protocole http. Sans plus tarder, allons droit au butrequests
包走天下。但是呢,听说golang中内置的http
包非常牛逼,咱就是说不得整点活,也刚好学习学习新东西,复习下http协议的请求和响应相关的知识点。话不多说,咱直接开整
本文章爬下必应壁纸先小试牛刀。狗头保命 狗头保命 狗头保命
爬虫流程概述
graph TD 请求数据 --> 解析数据 --> 数据入库
上图的流程图大家可以看到,其实爬虫并不麻烦,整个流程就只有三步而已。接下来具体聊聊每一步需要做什么
请求数据:在这里我们需要使用golang中的内置包http包向目标地址发起请求,这一步就完成了
解析数据:这里我们需要对请求到的数据进行解析,因为不是整个请求到的数据我们都需要,我们只需要某些具体的关键的数据而已。这一步也叫数据清洗
数据入库:不难理解,这就是将解析好的数据进行入库操作
实战分析
先到必应壁纸官网上观察,做爬虫的话是需要对数据特别敏感的。这是首页信息,整个页面是非常简洁的
接下来,需要调出浏览器的开发者工具(这个大家应该都非常熟悉吧,不熟悉的话很难跟下去的喔)。直接按下F12
Découvrez cet articleBing Wallpaper
Essayons-le d'abord. La tête du chien lui sauve la vie. La tête du chien lui sauve la vie. gênant. L’ensemble du processus ne comporte que trois étapes. Parlons ensuite de ce qui doit être fait à chaque étape
Demande de données : ici, nous devons utiliser le package http intégré dans golang pour lancer une demande à l'adresse cible. Complétée en une seule étape
Analyse des données : Ici, nous devons analyser les données demandées, car nous n'avons pas besoin de l'intégralité des données demandées, nous n'avons besoin que de certaines données clés spécifiques. Cette étape est également appelée nettoyage des données
Stockage des données : ce n'est pas difficile à comprendre, il s'agit de stocker les données analysées dans la base de données
Analyse pratique
Allez d'abord sur le site officiel de Bing Wallpaper pour observer et faire un robot d'exploration. Si tel est le cas, vous devez être particulièrement sensible aux données. Ce sont les informations de la page d'accueil. La page entière est très concise
Ensuite, vous devez appeler les outils de développement du navigateur (vous devriez être très familier avec cela, si vous ne le connaissez pas, ce sera difficile à suivre). Appuyez simplement sur
F12
ou faites un clic droit pour cocher Mais quoi ? Sur le fond d'écran Bing, un clic droit ne peut pas appeler la console et ne peut être appelé que manuellement. Ne vous inquiétez pas, suivez simplement la première image. Si le chrome d'un camarade de classe est en chinois, la même opération est effectuée. Sélectionnez plus d'outils et sélectionnez les outils de développementPas de surprise, tout le monde doit voir une page comme celle-ci
Ce n'est pas grave, c'est juste nécessaire. C'est juste un anti- erreurs d'exploration sur le site Web de papier peint. (Je n'ai pas eu cette erreur anti-crawling lors de mon exploration il y a longtemps) Cela n'affecte pas notre fonctionnement
Ensuite, sélectionnez cet outil pour nous aider à localiser rapidement l'élément que nous voulons Nous pourrons ensuite trouver ce dont nous avons besoin Image information
- Pratique du code
- Ce qui suit sont les données pour explorer une page
package main import ( "fmt" "github.com/PuerkitoBio/goquery" "io" "io/ioutil" "log" "net/http" "os" "time" ) func Run(method, url string, body io.Reader, client *http.Client) { req, err := http.NewRequest(method, url, body) if err != nil { log.Println("获取请求对象失败") return } req.Header.Set("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36") resp, err := client.Do(req) if err != nil { log.Println("发起请求失败") return } if resp.StatusCode != http.StatusOK { log.Printf("请求失败,状态码:%d", resp.StatusCode) return } defer resp.Body.Close() // 关闭响应对象中的body query, err := goquery.NewDocumentFromReader(resp.Body) if err != nil { log.Println("生成goQuery对象失败") return } query.Find(".container .item").Each(func(i int, s *goquery.Selection) { imgUrl, _ := s.Find("a.ctrl.download").Attr("href") imgName := s.Find(".description>h3").Text() fmt.Println(imgUrl) fmt.Println(imgName) DownloadImage(imgUrl, i, client) time.Sleep(time.Second) fmt.Println("-------------------------") }) } func DownloadImage(url string, index int, client *http.Client) { req, err := http.NewRequest("POST", url, nil) if err != nil { log.Println("获取请求对象失败") return } req.Header.Set("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36") resp, err := client.Do(req) if err != nil { log.Println("发起请求失败") return } data, err := ioutil.ReadAll(resp.Body) if err != nil { log.Println("读取请求体失败") return } baseDir := "./image/image-%d.jpg" f, err := os.OpenFile(fmt.Sprintf(baseDir, index), os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0666) if err != nil { log.Println("打开文件失败", err.Error()) return } defer f.Close() _, err = f.Write(data) if err != nil { log.Println("写入数据失败") return } fmt.Println("下载图片成功") } func main() { client := &http.Client{} url := "https://bing.ioliu.cn/?p=%d" method := "GET" Run(method, url, nil, client) }Copier après la connexion- Ce qui suit sont les données pour explorer plusieurs pages
Le code pour explorer plusieurs pages n'a pas beaucoup changé, nous avons toujours devez d'abord observer les fonctionnalités du site WebAvez-vous trouvé quelque chose ? La première page p=1, la deuxième page p=2, la dixième page p=10
Nous commençons donc simplement une boucle for, puis réutilisons le code qui a exploré la page unique avant🎜🎜🎜Résumé🎜🎜🎜Dans Dans notre exemple, nous utilisons un package d'outils tiers pour analyser les données d'une page Web, car il est vraiment trop compliqué d'utiliser des expressions régulières🎜🎜🎜Utilisez le sélecteur CSS : 🎜goQuery🎜🎜🎜Utilisez le sélecteur XPath : 🎜htmlquery🎜🎜🎜 Regular : Package intégré, non recommandé, les règles régulières sont difficiles à écrire🎜🎜🎜Apprentissage recommandé :🎜Tutoriel Golang🎜🎜// 爬取多页的main函数如下 func main() { client := &http.Client{} url := "https://bing.ioliu.cn/?p=%d" method := "GET" for i := 1; i < 5; i++ { // 实现分页操作 Run(method, fmt.Sprintf(url, i), nil, client) } }Copier après la connexion
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!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Lire et écrire des fichiers en toute sécurité dans Go est crucial. Les directives incluent : Vérification des autorisations de fichiers Fermeture de fichiers à l'aide de reports Validation des chemins de fichiers Utilisation de délais d'attente contextuels Le respect de ces directives garantit la sécurité de vos données et la robustesse de vos applications.

Comment configurer le pool de connexions pour les connexions à la base de données Go ? Utilisez le type DB dans le package base de données/sql pour créer une connexion à la base de données ; définissez MaxOpenConns pour contrôler le nombre maximum de connexions simultanées ; définissez MaxIdleConns pour définir le nombre maximum de connexions inactives ; définissez ConnMaxLifetime pour contrôler le cycle de vie maximum de la connexion ;

Le framework Go se distingue par ses hautes performances et ses avantages en matière de concurrence, mais il présente également certains inconvénients, tels qu'être relativement nouveau, avoir un petit écosystème de développeurs et manquer de certaines fonctionnalités. De plus, les changements rapides et les courbes d’apprentissage peuvent varier d’un cadre à l’autre. Le framework Gin est un choix populaire pour créer des API RESTful en raison de son routage efficace, de sa prise en charge JSON intégrée et de sa puissante gestion des erreurs.

Meilleures pratiques : créer des erreurs personnalisées à l'aide de types d'erreurs bien définis (package d'erreurs) fournir plus de détails consigner les erreurs de manière appropriée propager correctement les erreurs et éviter de masquer ou de supprimer les erreurs Wrap si nécessaire pour ajouter du contexte

Comment utiliser Gomega pour les assertions dans les tests unitaires Golang Dans les tests unitaires Golang, Gomega est une bibliothèque d'assertions populaire et puissante qui fournit des méthodes d'assertion riches afin que les développeurs puissent facilement vérifier les résultats des tests. Installez Gomegagoget-ugithub.com/onsi/gomega Utilisation de Gomega pour les assertions Voici quelques exemples courants d'utilisation de Gomega pour les assertions : 1. Importation d'assertion d'égalité "github.com/onsi/gomega" funcTest_MyFunction(t*testing.T){

Les données JSON peuvent être enregistrées dans une base de données MySQL à l'aide de la bibliothèque gjson ou de la fonction json.Unmarshal. La bibliothèque gjson fournit des méthodes pratiques pour analyser les champs JSON, et la fonction json.Unmarshal nécessite un pointeur de type cible pour désorganiser les données JSON. Les deux méthodes nécessitent la préparation d'instructions SQL et l'exécution d'opérations d'insertion pour conserver les données dans la base de données.

La différence entre le framework GoLang et le framework Go se reflète dans l'architecture interne et les fonctionnalités externes. Le framework GoLang est basé sur la bibliothèque standard Go et étend ses fonctionnalités, tandis que le framework Go se compose de bibliothèques indépendantes pour atteindre des objectifs spécifiques. Le framework GoLang est plus flexible et le framework Go est plus facile à utiliser. Le framework GoLang présente un léger avantage en termes de performances et le framework Go est plus évolutif. Cas : gin-gonic (framework Go) est utilisé pour créer l'API REST, tandis qu'Echo (framework GoLang) est utilisé pour créer des applications Web.

Dans le développement du framework Go, les défis courants et leurs solutions sont les suivants : Gestion des erreurs : utilisez le package d'erreurs pour la gestion et utilisez un middleware pour gérer les erreurs de manière centralisée. Authentification et autorisation : intégrez des bibliothèques tierces et créez un middleware personnalisé pour vérifier les informations d'identification. Traitement simultané : utilisez des goroutines, des mutex et des canaux pour contrôler l'accès aux ressources. Tests unitaires : utilisez les packages, les simulations et les stubs gotest pour l'isolation, ainsi que les outils de couverture de code pour garantir la suffisance. Déploiement et surveillance : utilisez les conteneurs Docker pour regrouper les déploiements, configurer les sauvegardes de données et suivre les performances et les erreurs avec des outils de journalisation et de surveillance.
