Table des matières:

Gratter des données avec un ESP8266/ESP32 : 7 étapes
Gratter des données avec un ESP8266/ESP32 : 7 étapes

Vidéo: Gratter des données avec un ESP8266/ESP32 : 7 étapes

Vidéo: Gratter des données avec un ESP8266/ESP32 : 7 étapes
Vidéo: Extraire les données d’un site web avec ESP8266/ESP32 2024, Novembre
Anonim
Gratter des données avec un ESP8266/ESP32
Gratter des données avec un ESP8266/ESP32
Gratter des données avec un ESP8266/ESP32
Gratter des données avec un ESP8266/ESP32

Avez-vous déjà voulu obtenir des données pour vos projets Arduino, mais il n'y a pas d'API publique pour cela ? Ou dans des cas comme l'API Instagram où le processus de configuration n'est pas très pratique ?

Dans ce Instructable, nous allons examiner 2 options différentes pour extraire les données d'un site Web pour vos projets ESP8266 ou ESP32.

Étape 1: Regardez la vidéo

Image
Image

J'ai fait une vidéo qui couvre la même chose que cette instructable, donc si vous êtes intéressé, s'il vous plaît vérifier !

Étape 2: Avant de commencer

Avant de commencer
Avant de commencer
Avant de commencer
Avant de commencer

Juste un avertissement que les données dont je parlerai de grattage sont des données publiques et ne nécessitent aucune authentification. Disons, par exemple, que mon nombre exact d'abonnés YouTube n'est disponible que pour moi dans Creator Studio, donc l'appareil devrait faire une demande qui s'authentifie en tant que moi pour le charger. Ces types de demandes seront hors de portée pour cette vidéo. Un test rapide pour vérifier s'il serait couvert consiste à essayer de charger la page dans une fenêtre de navigation privée, car cela ne vous connectera automatiquement à aucun site.

Pour les techniques couvertes dans ce Instructable, nous devrons utiliser certains des outils de développement disponibles dans les navigateurs. Je vais les démontrer avec Firefox, mais je sais que Chrome a des outils similaires et je suis sûr que d'autres navigateurs les ont aussi.

Étape 3: API non publiques (Spoiler: Instructables en a une !)

La première façon que nous examinerons consiste à utiliser une API non publique. Ce ne sera pas toujours disponible, mais si c'est le cas, c'est certainement la méthode que vous devriez viser à utiliser. Ce que j'appelle une "API non publique" est essentiellement l'endroit où un site utilise une API non annoncée sur son site Web dans les coulisses pour récupérer les données que nous cherchons à obtenir.

Il y a plusieurs raisons pour lesquelles ce serait l'option préférée à utiliser.

  1. Le plus grand avantage est qu'il est peu probable qu'il change aussi souvent qu'une page Web, si vous récupérez des données directement à partir du HTML de la page Web, chaque fois qu'ils modifient le site, votre analyse peut échouer.
  2. C'est normalement plus efficace pour les données. Lorsque vous récupérez une page Web, vous téléchargez essentiellement la page HTML entière pour en extraire des informations. Les API ne renvoient que des points de données, ce qui correspond normalement à des demandes beaucoup plus petites.
  3. C'est généralement plus facile à analyser. Normalement, les API renvoient des données au format JSON qui sont simples à analyser, cela est particulièrement vrai si vous extrayez plusieurs éléments de données.

Nous devons d'abord savoir si la page Web utilise une configuration comme celle-ci. Le plus gros indice est de savoir si le site met à jour la valeur en temps réel comme il le fait sur Kickstarter, mais même si ce n'est pas le cas, il y a toujours de l'espoir qu'il puisse utiliser cette configuration. Instructables utilise une API non publique pour récupérer des données pour leur site même si elles ne s'actualisent pas en temps réel.

Pour vérifier si le site utilise cette configuration, entrez dans le mode développeur de votre navigateur, je trouve que le moyen le plus simple de le faire est de faire un clic droit sur la page et de sélectionner « inspecter l'élément ».

Vous voudrez ensuite accéder à l'onglet réseau, cela affichera les demandes de la page Web en arrière-plan, notez que vous devrez peut-être recharger la page après avoir ouvert cet onglet car il n'affichera que les demandes faites à partir de maintenant.

Vous voulez normalement rechercher ceux avec le type "json". Il peut y avoir beaucoup de demandes ici, il peut donc être utile de trier par type. Vous pouvez voir qu'il est très évident sur la page de campagne kickstarter qu'il utilise cette configuration, car vous pouvez voir des demandes constantes adressées à un point de terminaison "stats.json". Sur la page des auteurs d'Instructables (par exemple, la mienne est "https://www.instructables.com/member/witnessmenow/"), ils ne font pas de demandes constantes, mais vous pouvez voir caché parmi les autres une demande de point de terminaison "showAuthorStats".

Pour en savoir plus sur cette demande, vous pouvez cliquer dessus. Vous devriez pouvoir obtenir toutes les informations dont vous avez besoin à partir d'ici pour répliquer la demande. Mais avant de faire cela, vous devez d'abord vérifier qu'il contient les données que vous souhaitez. Cliquez sur, sur l'onglet réponse et voyez si les données sont là.

S'il contient les données dont vous avez besoin, vous êtes prêt ! Vous pouvez ensuite utiliser les mêmes approches que celles décrites dans ma vidéo précédente sur la connexion aux API. La version courte consiste à s'assurer que la demande fonctionne d'abord comme prévu sur un outil comme Postman, puis à utiliser cet exemple de projet pour tester qu'il fonctionne sur votre appareil.

Pour analyser les données JSON, je recommanderais d'utiliser ArudinoJSON dans la plupart des scénarios.

Étape 4: grattage des données directement

Gratter les données directement
Gratter les données directement
Gratter les données directement
Gratter les données directement
Gratter les données directement
Gratter les données directement

Ensuite, nous examinerons la récupération des données directement à partir de la page Web, c'est-à-dire la demande de la page Web complète sur l'appareil et l'analyse des données que nous voulons extraire. J'ai déjà mentionné les avantages de l'API non publique par rapport à cette méthode, mais il faut parfois le faire !

Une chose qu'il est important de noter ici, si vous êtes familiarisé avec le développement Web, vous pourriez être habitué à utiliser la fonction d'inspection d'élément pour trouver des informations sur un élément particulier et sur sa structure. Cela devrait être évité pour cette approche, car les pages Web modernes sont généralement modifiées dynamiquement à l'aide de Javascript, ce qui ne se produira pas sur votre appareil. Le code HTML disponible sur votre appareil sera uniquement la page Web d'origine téléchargée. Un bon exemple de ceci est la page TeamTrees, le nombre de dons actuel commence à 0 et est chargé dans la page plus tard avec cette animation, mais contrairement aux deux exemples que nous avons vus auparavant, il ne charge pas les données en arrière-plan, donc les données correctes doivent être ailleurs.

Pour afficher le code de la page Web d'origine, vous pouvez cliquer avec le bouton droit sur la page et sélectionner « Afficher la source ». Vous souhaitez ensuite rechercher les données particulières que vous souhaitez, donc dans l'exemple TeamTrees lorsque nous recherchons le nombre de dons actuel, nous pouvons voir que le nombre réel est stocké dans la propriété data-count de l'élément count, c'est là que nous devons gratter les données de.

Vous devez trouver une chaîne de recherche qui vous mène à vos données, il est beaucoup plus facile de le comprendre avant de coder pour l'appareil. Pour cet exemple, la recherche de « data-count\ » » m'amène directement aux données que nous voulons, ce qui est parfait. Nous n'avons pas à nous inquiéter qu'il corresponde également à d'autres endroits de la page, car il atteindra le premier en premier. Si vous aviez besoin de frapper le 3ème, vous pouvez simplement le programmer pour ignorer les 2 premiers que vous avez frappés.

Si nous examinons l'exemple de TeamTrees, comme auparavant, nous avons ignoré les en-têtes de réponse et examinons maintenant le corps de la réponse (qui est la page Web). Ce qui revient du client est un flux de données. Nous ne nous soucions de rien jusqu'à notre requête de recherche, alors nous faisons un client.find. S'il trouve la requête de recherche, il renverra true et déplacera le flux à la fin de la requête. La prochaine chose disponible dans le flux sera les données que nous recherchons, mais dans ce cas, nous ne savons pas combien de temps les données dureront, mais nous savons qu'il s'agit de toutes les informations entre notre place actuelle dans le flux et la prochaine virgule inversée. Nous pouvons y parvenir en utilisant " client.readBytesUntil " qui fait ce qu'il dit, il lit les octets dans un tampon jusqu'à ce qu'il atteigne la requête spécifiée. Assurez-vous simplement que le tampon dans lequel vous lisez est suffisamment grand pour contenir toutes les données, je pense que nous sommes assez sûrs ici avec 32 !

Si vous avez toutes les données dont vous avez besoin, vous n'avez plus besoin de lire de données. Je n'ai pas fermé la connexion ici car cela ne semblait pas poser de problème sur l'ESP8266, cela semblait poser des problèmes avec l'ESP32, j'ai donc ajouté un client.stop(). Pour être tout à fait honnête, je ne sais pas pourquoi je l'ai mis en haut de la méthode, je pense qu'il serait plus logique de la fermer une fois que vous avez les données que vous voulez.

Étape 5: grattage des données à l'aide d'un serveur externe:

Grattage des données à l'aide d'un serveur externe
Grattage des données à l'aide d'un serveur externe
Grattage des données à l'aide d'un serveur externe
Grattage des données à l'aide d'un serveur externe

Juste un autre sujet à aborder, il existe de bien meilleurs outils pour analyser sur des environnements informatiques classiques tels que NodeJS que sur un microcontrôleur, il peut donc parfois être judicieux de créer un service qui récupère les données d'une page Web et fournit un point de terminaison pour votre ESP8266 ou ESP32. Un exemple de cela était de gratter la page CrowdSupply pour obtenir un compte en direct du nombre de TinyPICO vendus. Il aurait peut-être été possible de le réaliser directement sur un ESP8266 ou un ESP32, mais comme il s'agissait d'analyser plusieurs points de données différents sur plusieurs éléments différents, cela aurait donc été compliqué.

J'ai fini par créer un projet NodeJS et analysé les données à l'aide d'une bibliothèque appelée cheerio et cela a très bien fonctionné. J'ai hébergé ce projet sur un serveur cloud que j'avais déjà, mais vous pouvez exécuter ce type de projet sur un pi si vous n'avez pas quelque chose comme cette configuration.

Étape 6: Limites d'utilisation

Limites d'utilisation
Limites d'utilisation

Une chose qui pourrait potentiellement avoir un impact sur toutes ces approches est d'atteindre les limites d'utilisation des sites. Dans les API classiques, le nombre de demandes que vous pouvez effectuer par minute ou par jour est normalement assez bien documenté et vous pouvez limiter vos demandes de projets en fonction de cela. Lorsque vous grattez, vous ne savez pas quelles sont ces limites, vous courez donc le risque de les atteindre et d'être potentiellement bloqué. Je ne peux pas donner de conseils précis sur la limitation afin que vous restiez dans leurs bons livres, mais je pense que tout ce qui est inférieur à chaque minute serait trop souvent, à part peut-être des cas comme kickstarter où ils semblent faire des demandes toutes les quelques secondes eux-mêmes.

Étape 7: Merci d'avoir lu

Espérons que cette vidéo vous a aidé si vous souhaitez analyser des données directement à partir de pages Web sur votre ESP8266 ou ESP32. Avez-vous d'autres questions sur le sujet que je n'ai pas abordées? S'il vous plaît laissez-moi savoir dans les commentaires ci-dessous, ou rejoignez-moi et un tas d'autres créateurs sur mon serveur Discord, où nous pouvons discuter de ce sujet ou de tout autre créateur lié à vous, les gens sont vraiment utiles là-bas, donc c'est un endroit idéal pour s'accrocher dehors

Je tiens également à remercier chaleureusement mes sponsors Github qui m'aident à soutenir ce que je fais, je l'apprécie vraiment. Si vous ne le savez pas, Github fait correspondre les parrainages pour la première année, donc si vous faites un parrainage, ils le feront à 100% pour les prochains mois.

Merci d'avoir lu!

Conseillé: