Indholdsfortegnelse:

Skrabning af data med en ESP8266/ESP32: 7 trin
Skrabning af data med en ESP8266/ESP32: 7 trin

Video: Skrabning af data med en ESP8266/ESP32: 7 trin

Video: Skrabning af data med en ESP8266/ESP32: 7 trin
Video: 伝統工芸プロセス4選。神様に選ばれた日本の職人たち。琴,筆,杓子,陶器 2024, November
Anonim
Skrabe data med en ESP8266/ESP32
Skrabe data med en ESP8266/ESP32
Skrabe data med en ESP8266/ESP32
Skrabe data med en ESP8266/ESP32

Har du nogensinde ønsket at få data til dine Arduino -projekter, men der er ingen offentlig API til det? Eller i tilfælde som Instagram API, hvor installationsprocessen for ikke er særlig praktisk?

I denne instruks vil vi se på 2 forskellige muligheder for at skrabe data fra et websted til dine ESP8266- eller ESP32 -projekter.

Trin 1: Tjek videoen

Image
Image

Jeg har lavet en video, der dækker det samme som dette instruerbare, så hvis du er interesseret, kan du tjekke det!

Trin 2: Inden vi starter

Inden vi starter
Inden vi starter
Inden vi starter
Inden vi starter

Bare en opskrift på, at de data, jeg vil tale om at skrabe, er offentlige data og ikke kræver nogen godkendelse. Så sig f.eks., At mit nøjagtige antal YouTube -abonnenter kun er tilgængeligt for mig inde i skaberstudiet, så enheden skulle lave en anmodning, der blev godkendt som mig om at indlæse den. Disse typer anmodninger vil være uden for anvendelsesområdet for denne video. En hurtig test for at kontrollere, om det er dækket, er at prøve at indlæse siden i et inkognitovindue, da det ikke automatisk logger dig ind på nogen websteder.

For teknikker, der er omfattet af denne instruks, bliver vi nødt til at bruge nogle af de udviklerværktøjer, der er tilgængelige i browsere. Jeg vil demonstrere dem med Firefox, men jeg ved med sikkerhed, at Chrome har lignende værktøjer, og jeg er sikker på, at andre browsere også har dem.

Trin 3: Ikke offentlige API'er (Spoiler: Instructables har en!)

Den første måde, vi ser på, er at bruge en ikke-offentlig API. Dette vil ikke altid være tilgængeligt, men hvis det er dette, er det bestemt den metode, du skal sigte efter at bruge. Det, jeg kalder en "ikke-offentlig API", er dybest set, hvor et websted bruger en uannonceret API på deres websted bag kulisserne for at hente de data, vi søger at få.

Der er et par grunde til, at dette ville være den foretrukne mulighed at bruge.

  1. Den største fordel er, at det er usandsynligt, at det ændres så ofte som en webside, hvis du skraber data direkte fra websidens HTML, hver gang de foretager en ændring af webstedet, kan din analyse bryde.
  2. Det er normalt mere dataeffektivt. Når du skraber en webside, downloader du dybest set hele HTML -siden for at udtrække oplysninger fra den, API'er vil kun returnere datapunkter, så det ville normalt være meget mindre anmodninger.
  3. Det er normalt lettere at analysere. Normalt returnerer API'er data i JSON -format, som er ligetil at analysere, dette gælder især, hvis du udtrækker flere data.

Vi skal først finde ud af, om websiden bruger et setup som dette. Det største fingerpeg er, om webstedet opdaterer værdien i realtid, som det gør på Kickstarter, men selvom det ikke gør det, er der stadig håb om, at det kan bruge denne opsætning. Instructables bruger en ikke-offentlig API til at hente nogle data til deres websted, selvom det ikke opdateres i realtid.

For at kontrollere, om webstedet bruger denne opsætning, skal du indtaste udviklertilstanden i din browser, jeg finder den nemmeste måde at gøre dette på ved at højreklikke på siden og vælge "inspicer element".

Du vil derefter gå til netværksfanen, dette viser de anmodninger, websiden fremsætter i baggrunden, bemærk, at du muligvis skal genindlæse siden efter at have åbnet denne fane, fordi den kun viser anmodninger fra nu.

Du vil normalt lede efter dem med typen "json". Der kan være mange anmodninger her, så det kan hjælpe at sortere efter type. Du kan se, at det er meget tydeligt på kickstarter -kampagnesiden, at det bruger denne opsætning, da du kan se konstante anmodninger til et "stats.json" slutpunkt. På siden Instructables forfattere (f.eks. Min er "https://www.instructables.com/member/witnessmenow/"), stiller de ikke konstante anmodninger, men du kan se skjult blandt de andre en anmodning om "showAuthorStats" slutpunkt.

Hvis du vil vide mere om denne anmodning, kan du klikke på den. Du bør kunne få alle de oplysninger, du har brug for herfra, for at replikere anmodningen. Men før du gør det, vil du først dobbelttjekke, at den har de data, du ønsker. Klik på fanen svar og se om dataene er der.

Hvis den indeholder de data, du har brug for, er du klar! Du kan derefter bruge de samme fremgangsmåder, der blev diskuteret i min tidligere video om forbindelse til API'er. Den korte version af det er at sikre, at anmodningen fungerer som forventet på et værktøj som Postman først og derefter bruge dette eksempelprojekt til at teste, at den fungerer på din enhed.

For at analysere JSON -data vil jeg anbefale at bruge ArudinoJSON i de fleste scenarier, hvis det er noget, du gerne vil have en instruerbar om, så lad mig bare vide det!

Trin 4: Skrab data direkte

Skraber data direkte
Skraber data direkte
Skraber data direkte
Skraber data direkte
Skraber data direkte
Skraber data direkte

Dernæst vil vi se på at skrabe dataene direkte fra websiden, dette er at anmode om hele websiden på enheden og analysere de data, vi ønsker ud. Jeg nævnte allerede fordelene ved den ikke-offentlige API i forhold til denne metode, men nogle gange skal behov!

En ting, der er vigtig at bemærke her, hvis du er fortrolig med webudvikling, kan du være vant til at bruge funktionen til inspektion af elementer til at finde ud af oplysninger om et bestemt element og hvordan det er opbygget. Dette bør undgås for denne tilgang, fordi moderne websider normalt ændres dynamisk ved hjælp af Javascript, hvilket ikke sker på din enhed. HTML -koden, der er tilgængelig på din enhed, er kun den originale webside, der downloades. Et godt eksempel på dette er TeamTrees -siden, det nuværende donationstal starter som 0 og indlæses senere på siden med denne animation, men i modsætning til de to eksempler, vi har set før, indlæser det ikke dataene i baggrunden, så de korrekte data skal være et andet sted.

For at se den originale webside -kode kan du højreklikke på siden og vælge "Vis kilde". Du vil derefter søge efter de bestemte data, du vil have, så i TeamTrees-eksemplet, når vi søger efter det aktuelle donationstal, kan vi se, at det faktiske antal er gemt i data-count-egenskaben for tælleelementet, det er her, vi skal skrabe dataene fra.

Du skal finde en søgestreng, der fører dig til dine data. Det er meget lettere at finde ud af dette, før du koder for enheden. I dette eksempel bringer søgning efter "datatælling \" "mig helt op til de data, vi ønsker, hvilket er perfekt. Vi behøver ikke bekymre dig om, at den også matcher andre steder på siden, for den rammer først den øverste. Hvis du havde brug for at ramme den tredje, kunne du bare programmere den til at ignorere de første 2, du ramte.

Hvis vi tager et kig på TeamTrees -eksemplet, som før, har vi hoppet over svaroverskrifterne og ser nu på svarets brødtekst (som er websiden). Det, der kommer tilbage fra klienten, er en datastrøm. Vi er ligeglade med noget op til vores søgeforespørgsel, så vi laver en client.find. Hvis den finder søgeforespørgslen, returnerer den sandt, og den flytter strømmen til slutningen af forespørgslen. Den næste ting, der er tilgængelig fra strømmen, er data, vi leder efter, men i dette tilfælde er vi usikre på, hvor lange dataene vil være, men vi ved, at det er alle oplysninger mellem vores nuværende sted i strømmen og det næste omvendte komma. Vi kan opnå dette ved at bruge "client.readBytesUntil", som gør hvad den siger, den læser bytes ind i en buffer, indtil den rammer den angivne forespørgsel. Bare sørg for, at bufferen, du læser ind, er stor nok til at indeholde alle data, jeg tror, vi er ret sikre her med 32!

Hvis du har alle de data, du har brug for, behøver du ikke længere læse data. Jeg lukkede ikke forbindelsen her, fordi det ikke syntes at forårsage et problem på ESP8266, det syntes at forårsage problemer med ESP32, så jeg tilføjede en client.stop (). For at være helt ærlig, er jeg ikke sikker på, hvorfor jeg satte det øverst på metoden, jeg ville tro, at det ville være mere fornuftigt at lukke det, når du har de data, du ønsker.

Trin 5: Skrabe data ved hjælp af en ekstern server:

Skrabe data ved hjælp af en ekstern server
Skrabe data ved hjælp af en ekstern server
Skrabe data ved hjælp af en ekstern server
Skrabe data ved hjælp af en ekstern server

Blot et andet emne at røre ved, der er meget bedre værktøjer til analyse af almindelige computerbaserede miljøer som NodeJS end på en mikrocontroller, så nogle gange kan det være fornuftigt at lave en tjeneste, der henter data fra en webside og giver en enklere endepunkt for din ESP8266 eller ESP32. Et eksempel på dette var at skrabe CrowdSupply -siden for at få en live telling af, hvor mange TinyPICO der blev solgt. Det kan have været muligt at opnå det direkte på en ESP8266 eller ESP32, men da det var at analysere flere forskellige datapunkter på flere forskellige elementer, så ville det have været kompliceret.

Jeg endte med at oprette et NodeJS -projekt og analyserede dataene ved hjælp af et bibliotek kaldet cheerio, og det fungerede meget godt. Jeg var vært for dette projekt på en cloud -server, jeg allerede havde, men du kunne køre denne form for projekt på en pi, hvis du ikke havde sådan noget setup.

Trin 6: Brugsgrænser

Anvendelsesgrænser
Anvendelsesgrænser

En ting, der potentielt kan påvirke alle disse fremgangsmåder, er at ramme grænserne for brug af websteder. I almindelige API'er er det normalt ret veldokumenteret, hvor mange anmodninger du kan komme med i minuttet eller om dagen, og du kan begrænse dine projektanmodninger baseret på dette. Når du skraber, ved du ikke, hvad disse grænser er, så du risikerer at ramme dem og potentielt blive blokeret. Jeg kan ikke give nogen præcise råd om at begrænse det, så du bliver i deres gode bøger, men jeg ville tro, at alt under hvert minut ville være for ofte, bortset fra måske tilfælde som kickstarter, hvor de ser ud til at stille anmodninger hvert par sekunder selv.

Trin 7: Tak fordi du læste

Forhåbentlig hjalp denne video, hvis du er interesseret i at analysere data direkte fra websider på din ESP8266 eller ESP32. Har du andre spørgsmål om emnet, som jeg ikke dækkede? Lad mig vide i kommentarerne herunder, eller slut mig til mig og en flok andre producenter på min Discord -server, hvor vi kan diskutere dette emne eller enhver anden makerrelateret, du har, folk er virkelig hjælpsomme der, så det er et godt sted at hænge ud

Jeg vil også gerne sige en kæmpe tak til mine Github -sponsorer, der hjælper med at støtte det, jeg gør, jeg sætter virkelig pris på det. Hvis du ikke ved det, matcher Github sponsorater for det første år, så hvis du laver et sponsorat, matcher de det 100% i de næste par måneder.

Tak fordi du læste!

Anbefalede: