Innehållsförteckning:

Skrapa data med en ESP8266/ESP32: 7 steg
Skrapa data med en ESP8266/ESP32: 7 steg

Video: Skrapa data med en ESP8266/ESP32: 7 steg

Video: Skrapa data med en ESP8266/ESP32: 7 steg
Video: Моя работа наблюдать за лесом и здесь происходит что-то странное 2024, Juli
Anonim
Skrapa data med en ESP8266/ESP32
Skrapa data med en ESP8266/ESP32
Skrapa data med en ESP8266/ESP32
Skrapa data med en ESP8266/ESP32

Har du någonsin velat få data för dina Arduino -projekt, men det finns inget offentligt API för det? Eller i fall som Instagram API där installationsprocessen för inte är särskilt bekväm?

I denna instruktionsbok kommer vi att titta på 2 olika alternativ för att skrapa data från en webbplats för dina ESP8266- eller ESP32 -projekt.

Steg 1: Kolla in videon

Image
Image

Jag har gjort en video som täcker samma sak som den här instruerbara, så om du är intresserad, kolla gärna in den!

Steg 2: Innan vi börjar

Innan vi börjar
Innan vi börjar
Innan vi börjar
Innan vi börjar

Bara en uppfattning om att de data jag kommer att prata om skrapning är offentligt införda data och inte kräver någon autentisering. Så säg till exempel att mitt exakta YouTube -abonnentantal bara är tillgängligt för mig i Creator Studio, så enheten måste göra en begäran som verifierats som jag för att ladda den. Denna typ av förfrågningar kommer inte att omfattas av den här videon. Ett snabbt test för att kontrollera om det täcks är att försöka ladda sidan i ett inkognitofönster eftersom det inte automatiskt loggar in dig på några webbplatser.

För tekniker som omfattas av denna instruktionsbok måste vi använda några av utvecklarverktygen som är tillgängliga i webbläsare. Jag kommer att demonstrera dem med Firefox, men jag vet att vissa Chrome har liknande verktyg och jag är säker på att andra webbläsare har dem också.

Steg 3: Icke offentliga API: er (Spoiler: Instructables Has One!)

Det första sättet vi kommer att titta på är att använda ett icke-offentligt API. Detta kommer inte alltid att vara tillgängligt, men om det är detta är definitivt den metod du bör sikta på att använda. Det jag kallar ett "icke-offentligt API" är i princip där en webbplats använder ett oannonserat API på sin webbplats bakom kulisserna för att hämta den data vi vill få.

Det finns några anledningar till varför detta skulle vara det föredragna alternativet att använda.

  1. Den största fördelen är att det är osannolikt att det ändras så ofta som en webbsida, om du skrapar data direkt från webbsidan HTML, varje gång de gör en ändring av webbplatsen, kan din analys brytas.
  2. Det är normalt mer dataeffektivt. När du skrapar en webbsida laddar du i princip ner hela HTML -sidan för att extrahera bitar av information från den, API: er kommer bara att returnera datapunkter, så det är normalt mycket mindre förfrågningar.
  3. Det är vanligtvis lättare att analysera. Normalt returnerar API: er data i JSON -format som är enkla att analysera, detta gäller särskilt om du extraherar flera data.

Vi måste först ta reda på om webbsidan använder en installation som denna. Den största ledtråden är om webbplatsen uppdaterar värdet i realtid som det gör på Kickstarter, men även om det inte gör det finns det fortfarande hopp om att det kan använda den här inställningen. Instructables använder ett icke-offentligt API för att hämta en del data för sin webbplats trots att den inte uppdateras i realtid.

För att kontrollera om webbplatsen använder denna inställning, gå in i utvecklarläget för din webbläsare, jag tycker att det enklaste sättet att göra detta är att högerklicka på sidan och välja "inspektera element".

Du kommer då att vilja gå till nätverksfliken, det här visar de förfrågningar som webbsidan gör i bakgrunden, observera att du kan behöva ladda om sidan efter att du har öppnat den här fliken eftersom den bara kommer att visa förfrågningar som gjorts från och med nu.

Du vill normalt leta efter dem med typen "json". Det kan finnas många förfrågningar här, så det kan hjälpa att sortera efter typ. Du kan se att det är väldigt uppenbart på kickstarter -kampanjsidan att den använder den här inställningen, eftersom du kan se ständiga förfrågningar till en "stats.json" slutpunkt. På sidan Instructables -författare (t.ex. min är "https://www.instructables.com/member/witnessmenow/") gör de inte ständiga förfrågningar, men du kan se dold bland de andra en begäran om "showAuthorStats" slutpunkt.

Om du vill veta mer om denna begäran kan du klicka på den. Du bör kunna få all information du behöver härifrån för att replikera förfrågan. Men innan du gör det vill du först dubbelkolla att den har den data du vill ha. Klicka på fliken svars och se om data finns där.

Om den innehåller den information du behöver är du klar! Du kan sedan använda samma metoder som diskuterades i min tidigare video om anslutning till API: er. Den korta versionen av det är att se till att begäran fungerar som förväntat på ett verktyg som Postman först och sedan använda detta exempelprojekt för att testa att den fungerar på din enhet.

För att analysera JSON -data skulle jag rekommendera att använda ArudinoJSON i de flesta scenarier, om det är något du vill ha en instruerbar om, låt mig bara veta!

Steg 4: Skrapa data direkt

Skrapa data direkt
Skrapa data direkt
Skrapa data direkt
Skrapa data direkt
Skrapa data direkt
Skrapa data direkt

Därefter kommer vi att titta på att skrapa data direkt från webbsidan, detta är att begära hela webbsidan på enheten och analysera data vi vill ha ut. Jag nämnde redan fördelarna med det icke-offentliga API: et framför denna metod, men ibland måste det!

En sak som är viktig att notera här, om du är bekant med webbutveckling kan du vara van att använda funktionen inspektera element för att ta reda på information om ett visst element och hur det är uppbyggt. Detta bör undvikas för detta tillvägagångssätt, eftersom moderna webbsidor vanligtvis ändras dynamiskt med Javascript, vilket inte kommer att hända på din enhet. HTML -koden som är tillgänglig på din enhet är endast den ursprungliga webbsidan som laddas ner. Ett bra exempel på detta är TeamTrees -sidan, det aktuella donationsräknandet börjar som 0 och laddas in på sidan senare med den här animationen, men till skillnad från de två exemplen vi har sett tidigare, laddar det inte data i bakgrunden, så rätt data måste finnas någon annanstans.

För att visa den ursprungliga webbsidans kod kan du högerklicka på sidan och välja "Visa källa". Du vill sedan söka efter den specifika data du vill ha, så i TeamTrees-exemplet när vi söker efter det aktuella donationsräkningen kan vi se det faktiska antalet lagras i data-count-egenskapen för räkningselementet, det är här vi behöver skrapa data från.

Du måste hitta en söksträng som leder dig till dina data. Det är mycket lättare att räkna ut detta innan du kodar för enheten. I det här exemplet, sökning efter "data-count \" "ger mig rätt upp till data vi vill ha, vilket är perfekt. Vi behöver inte oroa oss för att det också matchar på andra platser på sidan, eftersom det kommer att träffa den översta först. Om du behövde slå den tredje kan du bara programmera den för att ignorera de två första du träffade.

Om vi tar en titt på TeamTrees -exemplet, som tidigare har vi hoppat över svarsrubrikerna och tittar nu på svarets kropp (som är webbsidan). Det som kommer tillbaka från klienten är en dataström. Vi bryr oss inte om någonting upp till vår sökfråga, så vi gör en klient. Hitta. Om den hittar sökfrågan kommer den att returnera sant och den kommer att flytta strömmen till slutet av frågan. Nästa sak som är tillgänglig från strömmen kommer att vara data vi letar efter, men i det här fallet är vi osäkra på hur lång tid data kommer att vara, men vi vet att det är all information mellan vår nuvarande plats i strömmen och nästa inverterade komma. Vi kan uppnå detta genom att använda "client.readBytesUntil" som gör vad den säger, den läser byte i en buffert tills den träffar den angivna frågan. Se bara till att bufferten du läser in är tillräckligt stor för att hålla all data, jag tror att vi är ganska säkra här med 32!

Om du har all data du behöver behöver du inte läsa mer data. Jag stängde inte anslutningen här eftersom det inte verkade orsaka problem på ESP8266, det verkade orsaka problem med ESP32, så jag lade till en client.stop (). För att vara helt ärlig, jag är inte säker på varför jag placerade det högst upp i metoden, jag skulle tro att det skulle vara mer meningsfullt att stänga det när du har den data du vill ha.

Steg 5: Skrapa data med en extern server:

Skrapa data med en extern server
Skrapa data med en extern server
Skrapa data med en extern server
Skrapa data med en extern server

Bara ett annat ämne att beröra, det finns mycket bättre verktyg för analys av vanliga datorbaserade miljöer som NodeJS än på en mikrokontroller, så ibland kan det vara vettigt att göra en tjänst som hämtar data från en webbsida och ger en enklare slutpunkt för din ESP8266 eller ESP32. Ett exempel på detta var att skrapa CrowdSupply -sidan för att få en liveräkning av hur många TinyPICO som såldes. Det kan ha varit möjligt att uppnå det direkt på en ESP8266 eller ESP32, men eftersom det analyserade flera olika datapunkter på flera olika element, så hade det varit komplicerat.

Jag slutade skapa ett NodeJS -projekt och analyserade data med ett bibliotek som heter cheerio och det fungerade mycket bra. Jag var värd för det här projektet på molnserver jag redan hade, men du kan köra den här typen av projekt på en pi om du inte hade något sådant.

Steg 6: Användningsgränser

Användningsgränser
Användningsgränser

En sak som potentiellt kan påverka alla dessa tillvägagångssätt är att nå webbplatsens användningsgränser. I vanliga API: er är det normalt ganska väl dokumenterat hur många förfrågningar du kan göra per minut eller per dag och du kan begränsa dina projektförfrågningar baserat på detta. När du skrapar vet du inte vad dessa gränser är så du riskerar att träffa dem och eventuellt bli blockerade. Jag kan inte ge några exakta råd om att begränsa det så att du stannar kvar i deras bra böcker, men jag skulle tro att allt under varje minut skulle vara för ofta, annat än kanske fall som kickstarter där de verkar göra förfrågningar varannan sekund.

Steg 7: Tack för att du läste

Förhoppningsvis hjälpte den här videon om du är intresserad av att analysera data direkt från webbsidor på din ESP8266 eller ESP32. Har du några andra frågor om ämnet som jag inte täckte? Låt mig veta i kommentarerna nedan, eller gå med mig och ett gäng andra tillverkare på min Discord -server, där vi kan diskutera detta ämne eller någon annan makerrelaterad sådan du har, människor är verkligen hjälpsamma där så det är ett bra ställe att hänga på ut

Jag vill också rikta ett stort tack till mina Github -sponsorer som hjälper till att stödja det jag gör, jag uppskattar det verkligen. Om du inte vet matchar Github sponsring det första året, så om du gör en sponsring matchar de det 100% under de närmaste månaderna.

Tack för att du läser!

Rekommenderad: