Taula de continguts:

Raspar dades amb un ESP8266 / ESP32: 7 passos
Raspar dades amb un ESP8266 / ESP32: 7 passos

Vídeo: Raspar dades amb un ESP8266 / ESP32: 7 passos

Vídeo: Raspar dades amb un ESP8266 / ESP32: 7 passos
Vídeo: БАХШ ПЛОВ Бухарских Евреев 1000 летний РЕЦЕПТ КАК ПРИГОТОВИТЬ 2024, Desembre
Anonim
Raspar dades amb un ESP8266 / ESP32
Raspar dades amb un ESP8266 / ESP32
Raspar dades amb un ESP8266 / ESP32
Raspar dades amb un ESP8266 / ESP32

Alguna vegada heu volgut obtenir dades per als vostres projectes Arduino, però no hi ha cap API pública? O en casos com l’API d’Instagram on el procés de configuració de la versió no és molt convenient?

En aquest instructiu examinarem 2 opcions diferents per rascar dades d’un lloc web per als vostres projectes ESP8266 o ESP32.

Pas 1: fes una ullada al vídeo

Image
Image

He fet un vídeo que cobreix el mateix que aquest instructiu, així que si us interessa, comproveu-ho.

Pas 2: abans de començar

Abans de començar
Abans de començar
Abans de començar
Abans de començar

Només cal assenyalar que les dades sobre les quals parlaré de rascat són dades públiques i no requereixen cap autenticació. Per exemple, per exemple, el meu nombre exacte de subscriptors a YouTube només estic disponible a l'estudi de creadors, de manera que el dispositiu hauria de fer una sol·licitud que m'hagi autenticat per carregar-lo. Aquest tipus de sol·licituds quedaran fora de l'abast d'aquest vídeo. Una prova ràpida per comprovar si es tractaria és intentar carregar la pàgina en una finestra d'incògnit, ja que no us iniciarà la sessió automàticament a cap lloc.

Per a les tècniques que es cobreixen en aquesta instrucció, haurem d’utilitzar algunes de les eines per a desenvolupadors disponibles als navegadors. Els demostraré amb Firefox, però sé que cert Chrome té eines similars i estic segur que també en tenen altres navegadors.

Pas 3: API no públiques (Spoiler: Instructables en té una)

La primera manera que veurem és utilitzar una API no pública. No sempre estarà disponible, però si és així, aquest és definitivament el mètode que hauríeu d’utilitzar. El que anomeno "API no pública" és bàsicament quan un lloc utilitza una API no publicitzada al seu lloc web entre bastidors per obtenir les dades que volem obtenir.

Hi ha alguns motius pels quals aquesta seria l'opció preferida per utilitzar.

  1. L’avantatge més gran és que és poc probable que canviï tan sovint com una pàgina web, si rasqueu dades directament de l’HTML de la pàgina web, cada cop que facin un canvi al lloc, és possible que l’anàlisi es trenqui.
  2. Normalment és més eficient en dades. Quan rasqueu una pàgina web, bàsicament descarregueu tota la pàgina HTML per extreure’n informació, les API només retornaran punts de dades, de manera que normalment serien sol·licituds molt més petites.
  3. Normalment és més fàcil analitzar. Normalment, les API retornen dades en format JSON, que és senzill d’analitzar, això és especialment cert si esteu extraient diverses dades.

Primer hem d’esbrinar si la pàgina web utilitza una configuració com aquesta. La pista més important és si el lloc actualitza el valor en temps real, tal com ho fa a Kickstarter, però, fins i tot si no ho fa, encara es pot esperar que pugui utilitzar aquesta configuració. Instructables utilitza una API no pública per obtenir algunes dades del seu lloc, tot i que no s’actualitza en temps real.

Per comprovar si el lloc utilitza aquesta configuració, introduïu el mode de desenvolupador del vostre navegador; trobo que la forma més senzilla de fer-ho és fer clic dret a la pàgina i seleccionar "inspecciona l'element".

A continuació, voldreu anar a la pestanya de xarxa; mostrarà les sol·licituds que faci la pàgina web al fons. Tingueu en compte que és possible que hagueu de tornar a carregar la pàgina després d’obrir aquesta pestanya perquè només mostrarà les sol·licituds fetes a partir d’ara.

Normalment voleu cercar els que tinguin el tipus "json". Aquí hi pot haver moltes sol·licituds, de manera que pot ajudar-vos a ordenar per tipus. A la pàgina de la campanya kickstarter, és molt evident que utilitza aquesta configuració, ja que es poden veure sol·licituds constants a un punt final "stats.json". A la pàgina d’autors d’Instructables (per exemple, la meva és "https://www.instructables.com/member/witnessmenow/"), no fan sol·licituds constants, però podeu veure oculta entre les altres una sol·licitud per al punt final "showAuthorStats".

Per obtenir més informació sobre aquesta sol·licitud, podeu fer-hi clic. Hauríeu de poder obtenir tota la informació que necessiteu aquí per replicar la sol·licitud. Abans de fer-ho, voleu comprovar primer que tinguin les dades que desitgeu. Feu clic a la pestanya de resposta i veure si hi ha dades.

Si conté les dades que necessiteu, esteu a punt. A continuació, podeu utilitzar els mateixos enfocaments comentats al meu vídeo anterior sobre la connexió a les API. La versió curta d'això és assegurar-vos que la sol·licitud funciona com s'esperava en una eina com Postman i, a continuació, utilitzeu aquest projecte d'exemple per comprovar que funciona al vostre dispositiu.

Per analitzar les dades de JSON, recomanaria utilitzar ArudinoJSON en la majoria d’escenaris. Si això és una cosa que us agradaria ser instructiu, feu-m’ho saber.

Pas 4: rascar les dades directament

Raspar les dades directament
Raspar les dades directament
Raspar les dades directament
Raspar les dades directament
Raspar les dades directament
Raspar les dades directament

A continuació, analitzarem la possibilitat de raspar les dades directament de la pàgina web; es tracta de sol·licitar la pàgina web completa al dispositiu i analitzar les dades que desitgem. Ja he esmentat els avantatges de l'API no pública respecte a aquest mètode, però de vegades és necessari.

Una cosa que és important tenir en compte aquí, si esteu familiaritzat amb el desenvolupament web, és possible que estigueu acostumat a utilitzar la funció d'inspecció de l'element per esbrinar informació sobre un element concret i com està estructurat. Això s'hauria d'evitar per a aquest enfocament, perquè les pàgines web modernes solen canviar-se dinàmicament mitjançant Javascript, cosa que no passarà al vostre dispositiu. El codi HTML disponible al dispositiu només serà la pàgina web original que es descarrega. Un bon exemple d’això és la pàgina TeamTrees, el recompte de donacions actual comença a 0 i es carrega a la pàgina més endavant amb aquesta animació, però a diferència dels dos exemples que hem vist abans, no carrega les dades en segon pla. les dades correctes han de ser en un altre lloc.

Per veure el codi original de la pàgina web, podeu fer clic dret a la pàgina i seleccionar "Veure font". A continuació, voleu cercar les dades concretes que vulgueu, de manera que a l’exemple de TeamTrees quan cerquem el recompte de donacions actual, podem veure que el recompte real s’emmagatzema a la propietat de recompte de dades de l’element de recompte, aquí és on hem de rasqueu les dades de.

Heu de trobar una cadena de cerca que us dirigeixi a les vostres dades. És molt més fàcil esbrinar-ho abans de codificar el dispositiu. Per a aquest exemple, la cerca de "recompte de dades" em porta fins a les dades que desitgem, que són perfectes. No ens hem de preocupar que també coincideixi en altres llocs de la pàgina, perquè arribarà primer a la part superior. Si haguéssiu de colpejar el tercer, només podríeu programar-lo per ignorar els 2 primers que vau tocar.

Si fem una ullada a l’exemple de TeamTrees, com abans, hem saltat les capçaleres de resposta i ara estem veient el cos de la resposta (que és la pàgina web). El que torna del client és un flux de dades. No ens importa res fins a la nostra consulta de cerca, així que fem un client.find. Si troba la consulta de cerca, tornarà a ser veritable i mourà el flux fins al final de la consulta. El següent disponible del tauler serà les dades que cerquem, però en aquest cas no sabem quant de temps duraran les dades, però sabem que es tracta de tota la informació que hi ha entre el nostre lloc actual al tauler i la següent coma invertida.. Ho podem aconseguir utilitzant "client.readBytesUntil" que fa el que diu, llegeix els bytes en un buffer fins que arriba a la consulta especificada. Assegureu-vos que la memòria intermèdia que esteu llegint és prou gran com per contenir totes les dades, crec que estem molt segurs aquí amb 32.

Si teniu totes les dades que necessiteu, no necessiteu llegir-ne més. No vaig tancar la connexió aquí perquè no semblava causar cap problema a l’ESP8266, semblava que causava problemes amb l’ESP32, així que vaig afegir un client.stop (). Per ser completament honest, no estic segur de per què l’he posat al capdamunt del mètode, crec que tindria més sentit tancar-lo un cop tingueu les dades que voleu.

Pas 5: rascar dades mitjançant un servidor extern:

Rascat de dades mitjançant un servidor extern
Rascat de dades mitjançant un servidor extern
Rascat de dades mitjançant un servidor extern
Rascat de dades mitjançant un servidor extern

Només un altre tema a tocar, hi ha eines molt millors per analitzar en entorns basats en ordinadors habituals, com ara NodeJS, que en un microcontrolador, de manera que de vegades pot tenir sentit fer un servei que obtingui les dades d’una pàgina web i proporcioni un servei més senzill. punt final del vostre ESP8266 o ESP32. Un exemple d'això va ser raspar la pàgina de CrowdSupply per obtenir un recompte en temps real de quants TinyPICO es van vendre. Pot ser que fos possible aconseguir-ho directament en un ESP8266 o ESP32, però com que analitzava diversos punts de dades diferents en diversos elements diferents, hauria estat complicat.

Vaig acabar creant un projecte NodeJS i vaig analitzar les dades mitjançant una biblioteca anomenada cheerio i va funcionar molt bé. He allotjat aquest projecte al servidor de núvol que ja tenia, però podríeu executar aquest tipus de projecte en un pi si no teniu alguna cosa així.

Pas 6: Límits d'ús

Límits d’ús
Límits d’ús

Una cosa que podria afectar tots aquests enfocaments és assolir els límits d’ús dels llocs. A les API normals, normalment es documenta força bé quantes sol·licituds podeu fer per minut o per dia i podeu limitar les sol·licituds de projectes en funció d’això. Quan rasqueu, no sabeu quins són aquests límits, de manera que córreu el risc de colpejar-los i potencialment bloquejar-los. No puc donar cap consell exacte per limitar-lo, de manera que us quedeu als seus bons llibres, però crec que qualsevol cosa que sigui cada minut seria massa sovint, a part de casos com el kickstarter, que semblen fer sol·licituds cada pocs segons.

Pas 7: gràcies per llegir

Esperem que aquest vídeo us ajudi si esteu interessats en analitzar dades directament de pàgines web del vostre ESP8266 o ESP32. Té alguna altra pregunta sobre el tema que no vaig tractar? Feu-m’ho saber als comentaris que hi ha a continuació o acompanyeu-me a un munt d’autors al meu servidor Discord, on podem parlar d’aquest tema o de qualsevol altre relacionat amb els fabricants que tingueu. fora

També m'agradaria donar un enorme agraïment als meus patrocinadors Github que m'ajuden a donar suport al que faig, realment ho agraeixo. Si no ho sabeu, Github coincideix amb patrocinis durant el primer any, de manera que si feu un patrocini coincidirà amb el 100% durant els propers mesos.

Gràcies per llegir!

Recomanat: