Sisukord:

Andmete kraapimine ESP8266/ESP32 abil: 7 sammu
Andmete kraapimine ESP8266/ESP32 abil: 7 sammu

Video: Andmete kraapimine ESP8266/ESP32 abil: 7 sammu

Video: Andmete kraapimine ESP8266/ESP32 abil: 7 sammu
Video: Andmed kui kapital – statistika mõjuvõimust 21. sajandil 2024, Juuli
Anonim
Andmete kraapimine ESP8266/ESP32 abil
Andmete kraapimine ESP8266/ESP32 abil
Andmete kraapimine ESP8266/ESP32 abil
Andmete kraapimine ESP8266/ESP32 abil

Kas olete kunagi tahtnud oma Arduino projektide kohta andmeid saada, kuid selle jaoks pole avalikku API -d? Või sellistel juhtudel nagu Instagram API, kus seadistamisprotsess pole eriti mugav?

Selles juhendis vaatame kahte erinevat võimalust veebisaidilt andmete kogumiseks teie ESP8266 või ESP32 projektide jaoks.

Samm: vaadake videot

Image
Image

Olen teinud video, mis hõlmab sama asja nagu see juhendatav, nii et kui olete huvitatud, vaadake seda!

Samm: enne kui alustame

Enne kui alustame
Enne kui alustame
Enne kui alustame
Enne kui alustame

Pea meeles, et andmed, millest ma kraapimisest räägin, on avalikud andmed ja ei vaja autentimist. Ütleme näiteks, et minu täpne YouTube'i tellijate arv on mulle kättesaadav ainult loojastudios, nii et seade peaks selle laadimiseks esitama taotluse, mis autenditi minu nime all. Seda tüüpi päringud jäävad selle video jaoks välja. Kiire test selle kontrollimiseks, kas see on kaetud, on proovida laadida leht inkognito aknasse, kuna see ei logi teid automaatselt sisse ühelegi saidile.

Selles juhendis käsitletud tehnikate puhul peame kasutama mõnda brauserites saadaolevat arendustööriista. Ma demonstreerin neid Firefoxiga, kuid tean, et teatud Chrome'il on sarnased tööriistad ja olen kindel, et ka teistel brauseritel on need olemas.

Samm: mitteavalikud API -d (spoiler: Instructablesil on üks!)

Esimene viis, mida me vaatame, on mitteavaliku API kasutamine. See ei ole alati saadaval, kuid kui see on see, on see kindlasti meetod, mida peaksite kasutama. Ma nimetan "mitteavalikuks API-ks" põhimõtteliselt seda, kui sait kasutab oma veebisaidil kulisside taga reklaamimata API-d, et hankida andmeid, mida me soovime saada.

Sellel on mõned põhjused, miks seda eelistatakse kasutada.

  1. Suurim eelis on see, et tõenäoliselt ei muutu see nii sageli kui veebileht. Kui kraapite andmeid otse veebilehe HTML -ist, võib teie parsimine katkeda iga kord, kui nad saidil muudatusi teevad.
  2. Tavaliselt on see andmete tõhusam. Veebilehte kraapides laadite põhimõtteliselt alla kogu HTML -lehe, et sealt teavet tükeldada, tagastavad API -d ainult andmepunkte, nii et need oleksid tavaliselt palju väiksemad taotlused.
  3. Tavaliselt on seda lihtsam analüüsida. Tavaliselt tagastavad API -d andmeid JSON -vormingus, mida on lihtne sõeluda, eriti kui see on väljavõtteks mitu andmestikku.

Kõigepealt peame välja selgitama, kas veebileht kasutab sellist seadistust. Suurim vihje on see, kui sait värskendab väärtust reaalajas nagu Kickstarteris, kuid isegi kui seda ei tehta, on siiski lootust, et see võib seda seadistust kasutada. Instructables kasutab oma saidile teatud andmete toomiseks mitteavalikku API-d, kuigi seda ei värskendata reaalajas.

Et kontrollida, kas sait kasutab seda seadistust, sisestage oma brauseri arendajarežiim. Leian, et lihtsaim viis seda teha on paremklõps lehel ja valida „kontrolli elementi”.

Seejärel soovite minna vahekaardile Võrk, see kuvab veebisaidi taotlused taustal. Pange tähele, et peate võib -olla pärast vahekaardi avamist lehe uuesti laadima, kuna see näitab ainult nüüdsest tehtud taotlusi.

Tavaliselt soovite otsida tüüpe „json”. Siin võib olla palju taotlusi, seega võib abi olla tüübi järgi sortimisest. Näete, et kickstarteri kampaania lehel on väga ilmne, et see kasutab seda seadistust, kuna näete pidevaid päringuid „stats.json” lõpp -punktile. Instructabeli autorite lehel (nt minu oma on „https://www.instructables.com/member/witnessmenow/”) ei esita nad pidevaid taotlusi, kuid näete teiste hulgas peidetuna päringut „showAuthorStats” lõpp -punkti jaoks.

Selle taotluse kohta lisateabe saamiseks klõpsake sellel. Siit peaksite saama taotluse kordamiseks kogu vajaliku teabe. Kuid enne seda peate kõigepealt uuesti kontrollima, kas sellel on soovitud andmed. Klõpsake vastuste vahekaardil ja vaadake, kas andmed on olemas.

Kui see sisaldab vajalikke andmeid, olete kõik valmis! Seejärel saate kasutada samu lähenemisviise, mida arutasin oma eelmises videos API -dega ühenduse loomise kohta. Selle lühiversioon on veenduda, et päring töötab sellisel tööriistal nagu Postimees kõigepealt ootuspäraselt ja seejärel kasutada seda näidisprojekti, et testida, kas see töötab teie seadmes.

JSON -i andmete parsimiseks soovitaksin enamikus stsenaariumides kasutada ArudinoJSON -i, kui soovite midagi õpetlikku, andke mulle sellest teada!

Samm: andmete otse kraapimine

Andmete otse kraapimine
Andmete otse kraapimine
Andmete otse kraapimine
Andmete otse kraapimine
Andmete kraapimine otse
Andmete kraapimine otse

Järgmisena vaatame andmete kraapimist otse veebilehelt, see on seadme täieliku veebilehe taotlemine ja soovitud andmete parsimine. Olen juba maininud mitteavaliku API eeliseid selle meetodi ees, kuid mõnikord peavad!

Siin on oluline märkida üks asi: kui olete veebiarendusega tuttav, võite olla harjunud kasutama elemendi kontrollimise funktsiooni, et saada teavet konkreetse elemendi ja selle struktuuri kohta. Selle lähenemisviisi puhul tuleks seda vältida, sest tänapäevaseid veebilehti muudetakse tavaliselt dünaamiliselt Javascripti abil, mida teie seadmes ei juhtu. Teie seadmes saadaval olev HTML -kood on ainult algselt allalaaditud veebileht. Hea näide sellest on TeamTrees leht, praegune annetuste loend algab 0 -ga ja laaditakse selle animatsiooniga hiljem lehele, kuid erinevalt kahest näitest, mida oleme varem näinud, ei laadita see andmeid taustal, seega õiged andmed peavad olema kusagil mujal.

Veebilehe algse koodi vaatamiseks paremklõpsake lehte ja valige „Vaata allikat”. Seejärel soovite otsida soovitud andmeid, nii et TeamTrees näites, kui otsime praegust annetuste arvu, näeme, et tegelik arv on salvestatud loenduselemendi andmete loendamise atribuuti, see on koht, kus me peame kraapige andmed välja.

Peate leidma otsingustringi, mis viib teie andmeteni. Seda on enne seadme kodeerimist palju lihtsam välja selgitada. Selle näite puhul viib sõna „andmete loendamine” otsimine soovitud andmeteni, mis on täiuslik. Me ei pea muretsema, et see sobib ka lehe teistes kohtades, sest see tabab kõigepealt esimest. Kui teil oli vaja tabada kolmandat, võite selle lihtsalt programmeerida, et ignoreerida kahte esimest tabamust.

Kui vaatame TeamTrees'i näidet, nagu enne, oleme vastuste päised üle jätnud ja vaatame nüüd vastuse sisu (mis on veebisait). See, mis kliendilt tagasi tuleb, on andmevoog. Me ei hooli millestki kuni otsingupäringuni, seega teeme kliendi.find. Kui see leiab otsingupäringu, tagastab see tõese ja teisaldab voo päringu lõppu. Järgmine voost kättesaadav asi on andmed, mida otsime, kuid sel juhul pole me kindlad, kui kaua andmed kestavad, kuid me teame, et see on kogu teave meie praeguse voo koha ja järgmise tagurpidi koma vahel. Seda saame saavutada, kasutades käsku „client.readBytesUntil“, mis teeb seda, mida ta ütleb, loeb baidid puhvrisse, kuni jõuab määratud päringuni. Lihtsalt veenduge, et puhver, millesse te loete, on piisavalt suur, et mahutada kõiki andmeid, ma arvan, et me oleme siin 32 -ga üsna turvalised!

Kui teil on kõik vajalikud andmed, ei pea te enam andmeid lugema. Ma ei sulgenud ühendust siin, sest see ei tundunud ESP8266 -s probleemi tekitavat, tundus, et see tekitas probleeme ESP32 -ga, nii et lisasin kliendi.stop (). Kui aus olla, siis ma pole kindel, miks ma selle meetodi tippu tõstsin, ma arvan, et oleks mõttekam see sulgeda, kui teil on soovitud andmed.

Samm: andmete kraapimine välise serveri abil:

Andmete kraapimine välise serveri abil
Andmete kraapimine välise serveri abil
Andmete kraapimine välise serveri abil
Andmete kraapimine välise serveri abil

Ainult üks teema, mida puudutada, tavalises arvutipõhises keskkonnas, näiteks NodeJS, analüüsimiseks on palju paremaid tööriistu kui mikrokontrolleril, nii et mõnikord võib olla mõttekas luua teenus, mis tõmbab andmed veebilehelt ja pakub lihtsamat ESP8266 või ESP32 lõpp -punkt. Üks näide sellest oli CrowdSupply lehe kraapimine, et saada reaalajas loend sellest, kui palju TinyPICO -d müüdi. Võimalik, et seda oleks olnud võimalik saavutada otse ESP8266 või ESP32 abil, kuid kuna see analüüsis mitut erinevat andmepunkti mitmel erineval elemendil, oleks see olnud keeruline.

Lõin lõpuks NodeJS projekti ja analüüsisin andmeid, kasutades raamatukogu nimega cheerio ja see õnnestus väga hästi. Ma võõrustasin seda projekti pilveserveris, mis mul juba oli, kuid kui te ei peaks midagi sellist seadistama, saate seda projekti pi abil käivitada.

6. samm: kasutuspiirangud

Kasutuspiirangud
Kasutuspiirangud

Üks asi, mis võib kõiki neid lähenemisviise potentsiaalselt mõjutada, on saitide kasutuspiirangute ületamine. Tavalistes API -des on tavaliselt üsna hästi dokumenteeritud, mitu taotlust saate minutis või päevas esitada, ja saate selle põhjal oma projektitaotlusi piirata. Kui te kraapite, ei tea te, mis need piirid on, nii et teil on oht neid tabada ja potentsiaalselt blokeerida. Ma ei saa anda täpset nõu selle piiramise kohta, et jääksite nende headesse raamatutesse, kuid ma arvan, et iga minut on alla liiga sageli, välja arvatud sellised juhtumid nagu kickstarter, kus nad näivad ise iga paari sekundi tagant päringuid esitavat.

Samm 7: Täname lugemise eest

Loodetavasti aitas see video, kui olete huvitatud andmete parsimisest otse oma ESP8266 või ESP32 veebisaitidelt. Kas teil on selle teema kohta veel küsimusi, mida ma ei käsitlenud? Palun andke mulle sellest allpool kommentaarides teada või ühinege minu ja hunniku teiste tegijatega minu Discordi serveris, kus saame seda teemat või mõnda muud tegijaga seotud teemat arutada, inimesed on seal tõesti abiks, nii et see on suurepärane koht riputamiseks välja

Tahaksin ka väga tänada oma Githubi sponsoreid, kes aitavad minu tegemisi toetada, ma tõesti hindan seda. Kui te ei tea, siis Github sobitab sponsorlust esimest aastat, nii et kui teete sponsorluse, siis järgnevatel kuudel vastavad nad sellele 100%.

Täname lugemise eest!

Soovitan: