Obsah:

Škrábání dat pomocí ESP8266/ESP32: 7 kroků
Škrábání dat pomocí ESP8266/ESP32: 7 kroků

Video: Škrábání dat pomocí ESP8266/ESP32: 7 kroků

Video: Škrábání dat pomocí ESP8266/ESP32: 7 kroků
Video: How to get 5V from 18650 Lithium Battery Powering Arduino ESP32 ESP8266 or charge your phone 2024, Listopad
Anonim
Škrábání dat pomocí ESP8266/ESP32
Škrábání dat pomocí ESP8266/ESP32
Škrábání dat pomocí ESP8266/ESP32
Škrábání dat pomocí ESP8266/ESP32

Chtěli jste někdy získat data pro své projekty Arduino, ale neexistuje pro ně veřejné API? Nebo v případech, jako je Instagram API, kde proces instalace není příliš pohodlný?

V tomto Instructable se podíváme na 2 různé možnosti seškrábání dat z webu pro vaše projekty ESP8266 nebo ESP32.

Krok 1: Podívejte se na video

Image
Image

Natočil jsem video, které pokrývá stejnou věc jako tento návod, takže pokud vás to zajímá, podívejte se na to!

Krok 2: Než začneme

Než začneme
Než začneme
Než začneme
Než začneme

Jen si uvědomte, že data, o kterých budu hovořit o škrábání, jsou veřejně přístupná data a nevyžadují žádné ověřování. Řekněme například, že můj přesný počet odběratelů na YouTube je mi k dispozici pouze ve studiu pro autory, takže zařízení by muselo podat žádost, která se autentizuje jako já, abych jej načtl. Tyto typy požadavků budou pro toto video mimo rozsah. Rychlý test ke kontrole, zda by byl pokryt, je pokusit se načíst stránku v anonymním okně, protože vás to automaticky nepřihlásí na žádné weby.

Pro techniky zahrnuté v tomto Instructable budeme muset použít některé vývojářské nástroje, které jsou k dispozici v prohlížečích. Budu je demonstrovat pomocí Firefoxu, ale vím, že Chrome má podobné nástroje a jsem si jist, že je mají i jiné prohlížeče.

Krok 3: Neveřejná API (Spoiler: Instructables has one!)

První způsob, na který se podíváme, je použití neveřejného API. To nebude vždy k dispozici, ale pokud ano, je to určitě metoda, kterou byste se měli snažit použít. To, čemu říkám „neveřejné API“, je v zásadě situace, kdy určitý web používá v zákulisí na svém webu nereklamované API k načtení dat, která hledáme.

Existuje několik důvodů, proč by to byla upřednostňovaná možnost použití.

  1. Největší výhodou je, že je nepravděpodobné, že se bude měnit tak často jako webová stránka. Pokud data seškrábnete přímo z HTML webové stránky, pokaždé, když na webu provedou změnu, může dojít k přerušení analýzy.
  2. Obvykle je datově efektivnější. Když škrábáte webovou stránku, v podstatě stahujete celou stránku HTML, abyste z ní získali informace, rozhraní API budou vracet pouze datové body, takže by normálně byly mnohem menší požadavky.
  3. Obvykle je jednodušší analyzovat. Rozhraní API obvykle vrací data ve formátu JSON, který lze snadno analyzovat, což platí zejména v případě, že extrahujete více dat.

Nejprve musíme zjistit, zda webová stránka používá takové nastavení. Největší stopou je, jestli stránka aktualizuje hodnotu v reálném čase jako na Kickstarteru, ale i když ne, stále existuje naděje, že by toto nastavení mohla použít. Instructables používá neveřejné API pro načítání některých dat pro svůj web, i když se v reálném čase neobnovuje.

Chcete -li zkontrolovat, zda web používá toto nastavení, přejděte do vývojářského režimu vašeho prohlížeče. Zjistil jsem, že nejjednodušší způsob, jak to udělat, je kliknout pravým tlačítkem na stránku a vybrat „zkontrolovat prvek“.

Poté budete chtít přejít na kartu síť, na pozadí se budou zobrazovat požadavky, které webová stránka vytváří. Všimněte si, že po otevření této karty budete možná muset stránku znovu načíst, protože se budou zobrazovat pouze požadavky od nynějška.

Obvykle chcete hledat ty s typem „json“. Zde může být mnoho požadavků, takže může pomoci seřadit podle typu. Na stránce kampaně kickstarter můžete vidět, že toto nastavení používá, protože vidíte neustálé požadavky na koncový bod „stats.json“. Na stránce autorů Instructables (např. Moje je „https://www.instructables.com/member/witnessmenow/“) nevytvářejí stálé požadavky, ale mezi ostatními můžete vidět skrytý požadavek na koncový bod „showAuthorStats“.

Chcete -li zjistit více informací o tomto požadavku, můžete na něj kliknout. Zde byste měli mít možnost získat všechny informace, které potřebujete k replikaci žádosti. Ale než to uděláte, musíte nejprve zkontrolovat, zda má požadovaná data. Klikněte na kartu odpovědi a zjistěte, zda jsou data k dispozici.

Pokud obsahuje potřebná data, jste připraveni! Potom můžete použít stejné přístupy, jaké jsem popsal v mém předchozím videu o připojení k API. Krátká verze je zajistit, aby požadavek fungoval podle očekávání na nástroji, jako je Postman, a poté pomocí tohoto ukázkového projektu otestujte, zda funguje na vašem zařízení.

Pro analýzu dat JSON bych doporučil použít ArudinoJSON ve většině scénářů, pokud je to něco, o čem byste chtěli instruktáž, dejte mi vědět!

Krok 4: Přímé škrábání dat

Přímé škrábání dat
Přímé škrábání dat
Přímé škrábání dat
Přímé škrábání dat
Přímé škrábání dat
Přímé škrábání dat

Dále se podíváme na škrábání dat přímo z webové stránky, to je požadavek na plnou webovou stránku v zařízení a analýzu dat, která chceme. Již jsem zmínil výhody neveřejného API, které má nad touto metodou, ale někdy potřebuje!

Jedna věc, kterou je zde důležité poznamenat, pokud jste obeznámeni s vývojem webu, můžete být zvyklí používat funkci inspect element k vyhledání informací o konkrétním prvku a jeho struktuře. Tomuto přístupu je třeba se vyhnout, protože moderní webové stránky se obvykle dynamicky mění pomocí Javascriptu, což se ve vašem zařízení nestane. HTML kód, který je k dispozici ve vašem zařízení, bude pouze původní stažená webová stránka. Dobrým příkladem je stránka TeamTrees, aktuální počet darů začíná na 0 a načte se na stránku později s touto animací, ale na rozdíl od dvou příkladů, které jsme viděli dříve, nenačte data na pozadí, takže správná data musí být někde jinde.

Chcete -li zobrazit původní kód webové stránky, klikněte na stránku pravým tlačítkem a vyberte možnost „Zobrazit zdroj“. Poté budete chtít vyhledat konkrétní požadovaná data, takže v příkladu TeamTrees, když hledáme aktuální počet darů, vidíme, že skutečný počet je uložen ve vlastnosti počítání dat prvku count, to je místo, kde potřebujeme seškrábnout data z.

Musíte najít vyhledávací řetězec, který vás přivede k vašim datům. Je mnohem snazší to zjistit před kódováním zařízení. V tomto případě se vyhledáním výrazu „počet dat \“dostanu k požadovaným datům, což je perfektní. Nemusíme se obávat, že se bude shodovat i na jiných místech na stránce, protože jako první zasáhne první. Pokud jste potřebovali zasáhnout třetí, mohli byste ho naprogramovat tak, aby ignoroval první 2, které trefíte.

Pokud se podíváme na příklad TeamTrees, jako předtím jsme přeskočili záhlaví odpovědí a nyní se díváme na tělo odpovědi (což je webová stránka). To, co se vrací od klienta, je proud dat. Nestaráme se o nic až do našeho vyhledávacího dotazu, takže děláme client.find. Pokud vyhledávací dotaz najde, vrátí hodnotu true a přesune stream na konec dotazu. Další věc, která je ve streamu k dispozici, budou data, která hledáme, ale v tomto případě si nejsme jisti, jak dlouho data budou, ale víme, že to jsou všechny informace mezi naším aktuálním místem ve streamu a další převrácenou čárkou. Toho můžeme dosáhnout použitím „client.readBytesUntil“, který dělá to, co říká, čte bajty do vyrovnávací paměti, dokud nenarazí na zadaný dotaz. Jen se ujistěte, že vyrovnávací paměť, do které čtete, je dostatečně velká, aby pojala všechna data, myslím, že jsme tu celkem v bezpečí s 32!

Pokud máte všechna potřebná data, nemusíte data dále číst. Zde jsem připojení nezavřel, protože se nezdálo, že by to způsobilo problém na ESP8266, zdálo se, že to způsobuje problémy s ESP32, takže jsem přidal client.stop (). Abych byl úplně upřímný, nejsem si jistý, proč jsem to dal na vrchol metody, domníval bych se, že by dávalo větší smysl to zavřít, až budete mít požadovaná data.

Krok 5: Škrábání dat pomocí externího serveru:

Škrábání dat pomocí externího serveru
Škrábání dat pomocí externího serveru
Škrábání dat pomocí externího serveru
Škrábání dat pomocí externího serveru

Jen jedno další téma, kterého se dotknout, existují mnohem lepší nástroje pro analýzu v běžných počítačových prostředích, jako je NodeJS, než na mikrořadiči, takže někdy může mít smysl vytvořit službu, která načítá data z webové stránky a poskytuje jednodušší koncový bod pro váš ESP8266 nebo ESP32. Jedním z příkladů bylo vyškrábání stránky CrowdSupply, abyste získali živý počet prodaných TinyPICO. Možná to bylo možné dosáhnout přímo na ESP8266 nebo ESP32, ale protože to analyzovalo několik různých datových bodů na několika různých prvcích, bylo by to komplikované.

Nakonec jsem vytvořil projekt NodeJS a analyzoval data pomocí knihovny s názvem cheerio a fungovalo to velmi dobře. Hostoval jsem tento projekt na cloudovém serveru, který jsem již měl, ale tento typ projektu byste mohli spustit na pi, pokud byste něco takového neměli.

Krok 6: Omezení použití

Omezení použití
Omezení použití

Jedna věc, která by mohla potenciálně ovlivnit všechny tyto přístupy, je překročení limitů využití webů. V běžných API je obvykle docela dobře zdokumentováno, kolik požadavků můžete podat za minutu nebo za den, a na základě toho můžete omezit požadavky na své projekty. Když škrábáte, nevíte, jaká jsou tato omezení, takže riskujete, že je narazíte a potenciálně budete zablokováni. Nemohu poskytnout žádné přesné rady, jak to omezit, abyste zůstali v jejich dobrých knihách, ale domníval bych se, že cokoli za každou minutu by bylo příliš často, kromě případů, jako je například kickstarter, kde se zdá, že každých pár sekund sami žádají.

Krok 7: Děkujeme za přečtení

Naštěstí toto video pomohlo, pokud máte zájem o analýzu dat přímo z webových stránek na vašem ESP8266 nebo ESP32. Máte nějaké další otázky k tématu, které jsem nepokryl? Dejte mi prosím vědět v níže uvedených komentářích, nebo se připojte ke mně a spoustě dalších tvůrců na mém serveru Discord, kde můžeme diskutovat o tomto tématu nebo o jakémkoli jiném, co se týká výrobce, lidé jsou tam opravdu nápomocní, takže je to skvělé místo k zavěšení ven

Také bych chtěl moc poděkovat svým sponzorům Github, kteří pomáhají podporovat to, co dělám, opravdu si toho vážím. Pokud nevíte, Github odpovídá sponzorství pro první rok, takže pokud uděláte sponzorství, bude mu to odpovídat 100% v příštích několika měsících.

Děkuji za přečtení!

Doporučuje: