INHOUDSOPGAWE:

Gegee data met 'n ESP8266/ESP32: 7 stappe
Gegee data met 'n ESP8266/ESP32: 7 stappe

Video: Gegee data met 'n ESP8266/ESP32: 7 stappe

Video: Gegee data met 'n ESP8266/ESP32: 7 stappe
Video: How to use ESP32 WiFi and Bluetooth with Arduino IDE full details with examples and code 2024, November
Anonim
Gegee data met 'n ESP8266/ESP32
Gegee data met 'n ESP8266/ESP32
Gegee data met 'n ESP8266/ESP32
Gegee data met 'n ESP8266/ESP32

Wou u al ooit data vir u Arduino -projekte bekom, maar daar is geen openbare API daarvoor nie? Of in gevalle soos die Instagram API, waar die opstelproses daarvan nie baie gerieflik is nie?

In hierdie Instructable gaan ons kyk na 2 verskillende opsies om data van u webwerf af te skrap vir u ESP8266- of ESP32 -projekte.

Stap 1: Kyk na die video

Image
Image

Ek het 'n video gemaak wat dieselfde as hierdie instruksies dek, so kyk gerus as jy belangstel!

Stap 2: Voordat ons begin

Voordat ons begin
Voordat ons begin
Voordat ons begin
Voordat ons begin

Net 'n goeie idee dat die data waaroor ek gaan praat oor skraap, data in die openbaar is en geen stawing vereis nie. So, byvoorbeeld, my presiese aantal YouTube -intekenare is slegs vir my beskikbaar in die skepper -ateljee, sodat die toestel 'n versoek moet rig om te laai. Hierdie tipe versoeke is buite die omvang van hierdie video. 'N Vinnige toets om te sien of dit behandel word, is om die bladsy in 'n incognito -venster te laai, aangesien dit u nie outomaties by enige webwerwe aanmeld nie.

Vir tegnieke wat in hierdie instruksies behandel word, sal ons 'n paar ontwikkelaarhulpmiddels moet gebruik wat in blaaiers beskikbaar is. Ek sal dit met Firefox demonstreer, maar ek weet dat sekere Chrome soortgelyke gereedskap het en dat ander blaaiers dit ook het.

Stap 3: Nie -openbare API's (Spoiler: Instructables het een!)

Die eerste manier waarop ons sal kyk, is die gebruik van 'n nie-openbare API. Dit sal nie altyd beskikbaar wees nie, maar dit is beslis die metode wat u moet gebruik. Wat ek 'n 'nie-openbare API' noem, is eintlik waar 'n webwerf agter die skerms 'n ongeadverteerde API op hul webwerf gebruik om die data wat ons wil kry, te gaan haal.

Daar is 'n paar redes waarom dit die voorkeuropsie is om te gebruik.

  1. Die grootste voordeel is dat dit onwaarskynlik is dat dit so gereeld soos 'n webblad verander, as u data direk van die HTML -bladsy afskraap, kan u ontleding breek elke keer as dit 'n verandering aan die webwerf maak.
  2. Dit is gewoonlik meer data -doeltreffend. As u 'n webblad skrap, laai u basies die hele HTML -bladsy af om inligting daaruit te haal, API's sal slegs datapunte teruggee, dus is dit gewoonlik baie kleiner versoeke.
  3. Dit is gewoonlik makliker om te ontleed. Gewoonlik gee API's data terug in die JSON -formaat wat maklik is om te ontleed, veral as u meer data haal.

Ons moet eers uitvind of die webwerf 'n opstelling soos hierdie gebruik. Die grootste idee is of die webwerf die waarde intyds opdateer soos op Kickstarter, maar selfs as dit nie die geval is nie, is daar steeds hoop dat dit hierdie opstelling kan gebruik. Instructables gebruik 'n nie-openbare API om data vir hul webwerf te gaan haal, alhoewel dit nie intyds opgedateer word nie.

Om te kyk of die webwerf hierdie opstelling gebruik, gaan na die ontwikkelaarmodus van u blaaier.

U sal dan na die netwerk -oortjie wil gaan; dit sal die versoeke op die agtergrond op die agtergrond vertoon; let op dat u moontlik die bladsy moet herlaai nadat u hierdie oortjie oopgemaak het, omdat dit slegs versoeke van nou af sal wys.

Normaalweg wil u soek na diegene met die tipe "json". Daar kan baie versoeke wees, so dit kan help om volgens tipe te sorteer. U kan sien dat dit op die kickstarter -veldtogbladsy baie duidelik is dat hierdie opstelling gebruik word, aangesien u kan sien dat daar voortdurend versoek word na 'n 'stats.json' eindpunt. Op die Instructables -skrywersblad (bv. Myne is "https://www.instructables.com/member/witnessmenow/"), rig hulle nie konstante versoeke nie, maar u kan 'n versoek aan die eindpunt van 'showAuthorStats' versteek onder die ander sien.

Om meer inligting oor hierdie versoek uit te vind, kan u daarop klik. U behoort al die inligting wat u benodig, van hier af te kry om die versoek te herhaal. Maar voordat u dit doen, wil u eers kyk of dit die data bevat wat u wil hê. Klik op die reaksie -oortjie en kyk of die data daar is.

As dit die inligting bevat wat u benodig, is u gereed! U kan dan dieselfde benaderings gebruik as wat ek in my vorige video bespreek het oor hoe om met API's te skakel. Die kort weergawe daarvan is om eers seker te maak dat die versoek eers op 'n instrument soos Postman werk soos verwag, en gebruik dan hierdie voorbeeldprojek om te toets of dit op u toestel werk.

Vir die ontleding van die JSON -data, sou ek aanbeveel om ArudinoJSON in die meeste scenario's te gebruik; laat weet my as dit iets is waaroor u 'n instruksie wil hê!

Stap 4: Skrap data direk

Skrap data direk
Skrap data direk
Skrap data direk
Skrap data direk
Skrap data direk
Skrap data direk

Vervolgens gaan ons kyk na die skraap van die data direk vanaf die webblad, dit is om die volledige webblad op die toestel aan te vra en die data wat ons wil ontleed. Ek het reeds genoem die voordele van die nie-openbare API bo hierdie metode, maar soms moet dit nodig wees!

Een ding wat hier belangrik is om op te let: as u vertroud is met webontwikkeling, is u moontlik gewoond daaraan om die funksie vir inspeksie -elemente te gebruik om inligting oor 'n spesifieke element uit te vind en hoe dit gestruktureer is. Dit moet vermy word vir hierdie benadering, want moderne webblaaie word gewoonlik dinamies verander met behulp van Javascript, wat nie op u toestel sal plaasvind nie. Die HTML -kode wat op u toestel beskikbaar is, is slegs die oorspronklike webblad wat afgelaai word. 'N Goeie voorbeeld hiervan is die TeamTrees -bladsy; die huidige skenkingtelling begin as 0 en word later met hierdie animasie op die bladsy gelaai, maar anders as die twee voorbeelde wat ons voorheen gesien het, laai dit nie die data op die agtergrond nie, dus die korrekte data moet êrens anders wees.

Om die oorspronklike webbladkode te sien, kan u met die rechtermuisknop op die bladsy klik en 'Bron kyk' kies. U wil dan soek na die spesifieke data wat u wil hê, so in die TeamTrees-voorbeeld, as ons na die huidige skenkingtelling soek, kan ons sien dat die werklike telling in die data-telling-eienskap van die telelement gestoor is. skraap die data uit.

U moet 'n soekstring vind wat u na u data lei; dit is baie makliker om dit uit te vind voordat u vir die toestel kodeer. In hierdie voorbeeld, as ek na 'datatelling \' soek, kom ek by die gewenste data, wat perfek is. Ons hoef nie bekommerd te wees dat dit ook op ander plekke op die bladsy pas nie, want dit sal die eerste een bereik. As u die derde een moes tref, kan u dit net programmeer om die eerste 2 wat u getref het, te ignoreer.

As ons na die TeamTrees -voorbeeld kyk, soos voorheen, het ons die antwoordopskrifte oorgeslaan en kyk ons nou na die liggaam van die antwoord (dit is die webblad). Wat van die kliënt af terugkom, is 'n stroom data. Ons gee niks om vir ons soektog nie, daarom doen ons 'n kliënt. As die soektog wel gevind word, sal dit waar word en dit sal die stroom na die einde van die navraag skuif. Die volgende wat uit die stroom beskikbaar is, is data wat ons soek, maar in hierdie geval is ons nie seker hoe lank die data sal wees nie, maar ons weet dat dit al die inligting is tussen ons huidige plek in die stroom en die volgende omgekeerde komma. Ons kan dit bereik deur 'client.readBytesUntil' te gebruik, wat doen wat dit sê, dit lees die grepe in 'n buffer totdat dit die gespesifiseerde navraag tref. Maak net seker dat die buffer wat u lees, groot genoeg is om al die data te bevat; ek dink ons is redelik veilig hier met 32!

As u al die nodige data het, hoef u nie meer data te lees nie. Ek het die verbinding hier nie gesluit nie, want dit lyk nie asof dit 'n probleem op die ESP8266 veroorsaak het nie, maar dit het wel probleme met die ESP32 veroorsaak, so ek het 'n client.stop () bygevoeg. Om eerlik te wees, ek is nie seker hoekom ek dit bo -aan die metode geplaas het nie; ek sou dink dit sou meer sin maak om dit te sluit sodra u die gewenste data het.

Stap 5: Skraap data met behulp van 'n eksterne bediener:

Gegee data met behulp van 'n eksterne bediener
Gegee data met behulp van 'n eksterne bediener
Gegee data met behulp van 'n eksterne bediener
Gegee data met behulp van 'n eksterne bediener

Net 'n ander onderwerp om aan te raak, daar is baie beter gereedskap vir die ontleding van gewone rekenaargebaseerde omgewings, soos NodeJS, as op 'n mikrobeheerder, so soms is dit sinvol om 'n diens te maak wat die data van 'n webblad af haal en 'n eenvoudiger eindpunt vir u ESP8266 of ESP32. Een voorbeeld hiervan was die skraap van die CrowdSupply -bladsy om 'n lewendige telling te kry van hoeveel TinyPICO verkoop is. Dit was moontlik moontlik om dit direk op 'n ESP8266 of ESP32 te bereik, maar aangesien dit verskillende datapunte op verskillende elemente ontleed het, sou dit ingewikkeld gewees het.

Ek het uiteindelik 'n NodeJS -projek geskep en die data ontleed met 'n biblioteek genaamd cheerio, en dit het baie goed gewerk. Ek het hierdie projek aangebied op die wolkbediener wat ek alreeds gehad het, maar u kan hierdie soort projek op 'n pi uitvoer as u nie so iets gehad het nie.

Stap 6: Gebruiksgrense

Gebruiksgrense
Gebruiksgrense

Een ding wat moontlik al hierdie benaderings kan beïnvloed, is die beperking van die gebruiksgrense van webwerwe. In gewone API's is dit gewoonlik redelik goed gedokumenteer hoeveel versoeke u per minuut of per dag kan rig, en u kan u projekteversoeke hierop beperk. As u skraap, weet u nie wat hierdie perke is nie, sodat u die risiko loop om dit te raak en moontlik geblokkeer te word. Ek kan nie presies advies gee oor die beperking daarvan nie, sodat u in hul goeie boeke bly, maar ek sou dink dat alles onder elke minuut te gereeld sou wees, behalwe miskien gevalle soos kickstarter waar dit lyk asof hulle elke paar sekondes self versoeke rig.

Stap 7: Dankie dat u gelees het

Hopelik het hierdie video gehelp as u daarin belangstel om data direk vanaf webblaaie op u ESP8266 of ESP32 te ontleed. Het u ander vrae oor die onderwerp wat ek nie behandel het nie? Laat weet my asseblief in die kommentaar hieronder, of sluit aan by my en 'n klomp ander makers op my Discord -bediener, waar ons hierdie onderwerp kan bespreek of enige ander verwante een wat u het, mense is baie behulpsaam daar, so dit is 'n goeie plek om op te hang uit

Ek wil ook my Github -borge bedank wat my help ondersteun wat ek doen, ek waardeer dit opreg. As u dit nie weet nie, pas Github borgskappe vir die eerste jaar by, so as u 'n borgskap maak, pas hulle dit die volgende paar maande 100% aan.

Dankie vir die lees!

Aanbeveel: