Inhaltsverzeichnis:

Scraping von Daten mit einem ESP8266/ESP32 - Gunook
Scraping von Daten mit einem ESP8266/ESP32 - Gunook

Video: Scraping von Daten mit einem ESP8266/ESP32 - Gunook

Video: Scraping von Daten mit einem ESP8266/ESP32 - Gunook
Video: Micropython mit ESP32 - 15: ESP32 als Webserver 2024, November
Anonim
Scraping von Daten mit einem ESP8266/ESP32
Scraping von Daten mit einem ESP8266/ESP32
Scraping von Daten mit einem ESP8266/ESP32
Scraping von Daten mit einem ESP8266/ESP32

Wollten Sie schon immer Daten für Ihre Arduino-Projekte abrufen, aber es gibt keine öffentliche API dafür? Oder in Fällen wie der Instagram-API, in denen der Einrichtungsprozess für das nicht sehr bequem ist?

In diesem Instructable werden wir uns 2 verschiedene Optionen zum Schaben von Daten von einer Website für Ihre ESP8266- oder ESP32-Projekte ansehen.

Schritt 1: Sehen Sie sich das Video an

Image
Image

Ich habe ein Video gemacht, das das gleiche wie dieses instructable abdeckt, also wenn Sie interessiert sind, schauen Sie es sich bitte an!

Schritt 2: Bevor wir beginnen

Bevor wir anfangen
Bevor wir anfangen
Bevor wir anfangen
Bevor wir anfangen

Nur ein Hinweis, dass die Daten, über die ich über das Scraping sprechen werde, öffentlich zugängliche Daten sind und keine Authentifizierung erfordern. Angenommen, meine genaue YouTube-Abonnentenzahl ist nur für mich im Creator Studio verfügbar, sodass das Gerät eine Anfrage stellen müsste, die als ich authentifiziert wurde, um es zu laden. Diese Art von Anfragen wird in diesem Video nicht berücksichtigt. Ein kurzer Test, um zu überprüfen, ob dies abgedeckt ist, besteht darin, zu versuchen, die Seite in einem Inkognito-Fenster zu laden, da Sie sich dadurch nicht automatisch bei Websites anmelden.

Für Techniken, die in diesem Instructable behandelt werden, müssen wir einige der Entwicklertools verwenden, die in Browsern verfügbar sind. Ich werde sie mit Firefox demonstrieren, aber ich weiß mit Sicherheit, dass Chrome ähnliche Tools hat und ich bin mir sicher, dass andere Browser sie auch haben.

Schritt 3: Nicht öffentliche APIs (Spoiler: Instructables hat eine!)

Der erste Weg, den wir uns ansehen, ist die Verwendung einer nicht öffentlichen API. Dies wird nicht immer verfügbar sein, aber wenn dies der Fall ist, ist dies definitiv die Methode, die Sie verwenden sollten. Was ich eine "nicht öffentliche API" nenne, ist im Grunde genommen, wenn eine Website eine nicht beworbene API auf ihrer Website hinter den Kulissen verwendet, um die Daten abzurufen, nach denen wir suchen.

Es gibt einige Gründe, warum dies die bevorzugte Option wäre.

  1. Der größte Vorteil ist, dass es unwahrscheinlich ist, dass es sich so oft wie eine Webseite ändert. Wenn Sie Daten direkt aus dem Webseiten-HTML kratzen, kann Ihr Parsing bei jeder Änderung an der Site unterbrechen.
  2. Es ist normalerweise dateneffizienter. Wenn Sie eine Webseite durchsuchen, laden Sie im Grunde die gesamte HTML-Seite herunter, um Informationen daraus zu extrahieren. APIs geben nur Datenpunkte zurück, daher wären es normalerweise viel kleinere Anfragen.
  3. Es ist normalerweise einfacher zu parsen. Normalerweise geben APIs Daten im JSON-Format zurück, das einfach zu analysieren ist. Dies gilt insbesondere, wenn Sie mehrere Datenelemente extrahieren.

Wir müssen zuerst herausfinden, ob die Webseite ein solches Setup verwendet. Der größte Hinweis ist, ob die Site den Wert in Echtzeit aktualisiert, wie es bei Kickstarter der Fall ist, aber selbst wenn dies nicht der Fall ist, besteht immer noch Hoffnung, dass sie dieses Setup verwendet. Instructables verwendet eine nicht öffentliche API, um einige Daten für ihre Website abzurufen, obwohl sie nicht in Echtzeit aktualisiert wird.

Um zu überprüfen, ob die Site dieses Setup verwendet, rufen Sie den Entwicklermodus Ihres Browsers auf. Ich finde, dass dies am einfachsten ist, wenn Sie mit der rechten Maustaste auf die Seite klicken und "Element überprüfen" auswählen.

Sie sollten dann zum Netzwerk-Tab gehen. Hier werden die Anfragen angezeigt, die die Webseite im Hintergrund stellt. Beachten Sie, dass Sie die Seite nach dem Öffnen dieses Tabs möglicherweise neu laden müssen, da sie von nun an nur noch gestellte Anfragen anzeigt.

Normalerweise möchten Sie diejenigen mit dem Typ „json“suchen. Hier kann es viele Anfragen geben, daher kann es hilfreich sein, nach Typ zu sortieren. Auf der Kickstarter-Kampagnenseite ist es sehr offensichtlich, dass dieses Setup verwendet wird, da Sie sehen können, dass ständige Anfragen an einen "stats.json" -Endpunkt gestellt werden. Auf der Instructables-Autorenseite (z. B. ist meine "https://www.instructables.com/member/witnessmenow/"), stellen sie keine ständigen Anfragen, aber Sie können unter den anderen eine Anfrage an den Endpunkt "showAuthorStats" versteckt sehen.

Um weitere Informationen zu dieser Anfrage zu erhalten, können Sie darauf klicken. Sie sollten in der Lage sein, von hier aus alle Informationen zu erhalten, die Sie benötigen, um die Anfrage zu replizieren. Bevor Sie dies tun, sollten Sie jedoch zunächst überprüfen, ob die gewünschten Daten vorhanden sind. Klicken Sie auf die Registerkarte Antwort und prüfen Sie, ob die Daten vorhanden sind.

Wenn es die benötigten Daten enthält, sind Sie bereit! Sie können dann dieselben Ansätze verwenden, die in meinem vorherigen Video zum Herstellen einer Verbindung mit APIs beschrieben wurden. Die Kurzversion davon besteht darin, sicherzustellen, dass die Anfrage zuerst auf einem Tool wie Postman wie erwartet funktioniert, und dann dieses Beispielprojekt zu verwenden, um zu testen, ob es auf Ihrem Gerät funktioniert.

Zum Analysieren der JSON-Daten würde ich in den meisten Szenarien die Verwendung von ArudinoJSON empfehlen. Wenn dies etwas ist, über das Sie eine Anleitung möchten, lassen Sie es mich einfach wissen!

Schritt 4: Daten direkt auskratzen

Daten direkt auskratzen
Daten direkt auskratzen
Daten direkt auskratzen
Daten direkt auskratzen
Daten direkt auskratzen
Daten direkt auskratzen

Als nächstes werden wir uns das Scraping der Daten direkt von der Webseite ansehen, dies fordert die vollständige Webseite auf dem Gerät an und analysiert die Daten, die wir herausgeben möchten. Ich habe bereits erwähnt, welche Vorteile die nicht-öffentliche API gegenüber dieser Methode hat, aber manchmal muss es sein!

Eine wichtige Anmerkung hier: Wenn Sie mit der Webentwicklung vertraut sind, sind Sie möglicherweise daran gewöhnt, mithilfe der Funktion zum Prüfen von Elementen Informationen über ein bestimmtes Element und dessen Struktur herauszufinden. Dies sollte bei diesem Ansatz vermieden werden, da moderne Webseiten in der Regel dynamisch per Javascript verändert werden, was auf Ihrem Gerät nicht passiert. Der auf Ihrem Gerät verfügbare HTML-Code ist nur die Original-Webseite, die heruntergeladen wird. Ein gutes Beispiel dafür ist die TeamTrees-Seite, der aktuelle Spendenzähler beginnt mit 0 und wird später mit dieser Animation in die Seite geladen, aber im Gegensatz zu den beiden zuvor gesehenen Beispielen werden die Daten nicht im Hintergrund geladen, also die richtigen Daten müssen woanders sein.

Um den ursprünglichen Webseitencode anzuzeigen, können Sie mit der rechten Maustaste auf die Seite klicken und "Quelle anzeigen" auswählen. Sie möchten dann nach den gewünschten Daten suchen. Wenn wir also im TeamTrees-Beispiel nach der aktuellen Spendenanzahl suchen, können wir sehen, dass die tatsächliche Anzahl in der data-count-Eigenschaft des count-Elements gespeichert ist die Daten abkratzen.

Sie müssen eine Suchzeichenfolge finden, die Sie zu Ihren Daten führt. Dies ist viel einfacher herauszufinden, bevor Sie das Gerät codieren. In diesem Beispiel bringt mich die Suche nach „data-count\“direkt zu den gewünschten Daten, was perfekt ist. Wir müssen uns keine Sorgen machen, dass es auch an anderen Stellen auf der Seite übereinstimmt, da es zuerst die oberste trifft. Wenn Sie die dritte treffen müssen, können Sie sie einfach so programmieren, dass die ersten beiden, die Sie treffen, ignoriert werden.

Wenn wir uns das TeamTrees-Beispiel ansehen, haben wir wie zuvor die Antwortheader übersprungen und sehen uns jetzt den Hauptteil der Antwort (die Webseite) an. Was vom Client zurückkommt, ist ein Datenstrom. Wir kümmern uns um nichts bis auf unsere Suchanfrage, also machen wir ein client.find. Wenn die Suchabfrage gefunden wird, wird true zurückgegeben und der Stream an das Ende der Abfrage verschoben. Das nächste, was aus dem Stream verfügbar ist, sind Daten, nach denen wir suchen, aber in diesem Fall sind wir uns nicht sicher, wie lange die Daten sein werden, aber wir wissen, dass es sich um alle Informationen zwischen unserer aktuellen Position im Stream und dem nächsten Anführungszeichen handelt. Wir können dies erreichen, indem wir „client.readBytesUntil“verwenden, das tut, was es sagt, es liest die Bytes in einen Puffer, bis es die angegebene Abfrage trifft. Stellen Sie nur sicher, dass der Puffer, in den Sie einlesen, groß genug ist, um alle Daten aufzunehmen. Ich denke, wir sind hier mit 32 ziemlich sicher!

Wenn Sie alle benötigten Daten haben, müssen Sie keine Daten mehr lesen. Ich habe die Verbindung hier nicht geschlossen, weil es auf dem ESP8266 kein Problem zu verursachen schien, es schien Probleme mit dem ESP32 zu verursachen, also fügte ich eine client.stop() hinzu. Um ganz ehrlich zu sein, bin ich mir nicht sicher, warum ich es an die Spitze der Methode gesetzt habe. Ich würde es für sinnvoller halten, es zu schließen, sobald Sie die gewünschten Daten haben.

Schritt 5: Scraping von Daten mit einem externen Server:

Scraping von Daten mit einem externen Server
Scraping von Daten mit einem externen Server
Scraping von Daten mit einem externen Server
Scraping von Daten mit einem externen Server

Um nur ein weiteres Thema anzusprechen, gibt es viel bessere Tools zum Parsen in normalen computerbasierten Umgebungen wie NodeJS als auf einem Mikrocontroller Endpunkt für Ihren ESP8266 oder ESP32. Ein Beispiel dafür war das Durchsuchen der CrowdSupply-Seite, um eine Live-Zählung der verkauften TinyPICO zu erhalten. Es wäre vielleicht möglich gewesen, dies direkt auf einem ESP8266 oder ESP32 zu erreichen, aber da mehrere verschiedene Datenpunkte auf mehreren verschiedenen Elementen analysiert wurden, wäre es kompliziert gewesen.

Am Ende habe ich ein NodeJS-Projekt erstellt und die Daten mit einer Bibliothek namens cheerio geparst und es hat sehr gut geklappt. Ich habe dieses Projekt auf einem Cloud-Server gehostet, den ich bereits hatte, aber Sie könnten diese Art von Projekt auf einem Pi ausführen, wenn Sie so etwas nicht hätten.

Schritt 6: Nutzungsbeschränkungen

Nutzungsbeschränkungen
Nutzungsbeschränkungen

Eine Sache, die sich möglicherweise auf alle diese Ansätze auswirken könnte, ist die Überschreitung der Nutzungsbeschränkungen für Websites. In regulären APIs ist normalerweise ziemlich gut dokumentiert, wie viele Anfragen Sie pro Minute oder pro Tag stellen können, und Sie können Ihre Projektanfragen basierend darauf begrenzen. Wenn Sie kratzen, kennen Sie diese Grenzen nicht, sodass Sie das Risiko eingehen, sie zu erreichen und möglicherweise blockiert zu werden. Ich kann keine genauen Ratschläge zur Begrenzung geben, damit Sie in ihren guten Büchern bleiben, aber ich denke, alles unter jeder Minute wäre zu oft, außer vielleicht Fällen wie Kickstarter, bei denen sie alle paar Sekunden selbst Anfragen zu stellen scheinen.

Schritt 7: Danke fürs Lesen

Hoffentlich hat dieses Video geholfen, wenn Sie daran interessiert sind, Daten direkt von Webseiten auf Ihrem ESP8266 oder ESP32 zu parsen. Haben Sie weitere Fragen zu dem Thema, die ich nicht behandelt habe? Bitte lass es mich in den Kommentaren unten wissen oder schließe dich mir und ein paar anderen Machern auf meinem Discord-Server an, wo wir dieses Thema oder jedes andere herstellerbezogene Thema diskutieren können. Die Leute sind dort wirklich hilfreich, also ist es ein großartiger Ort zum Abhängen aus

Ein großes Dankeschön möchte ich auch meinen Github-Sponsoren aussprechen, die mir helfen, meine Arbeit zu unterstützen, ich weiß das wirklich zu schätzen. Wenn Sie es nicht wissen, passt Github die Patenschaften für das erste Jahr an. Wenn Sie also eine Patenschaft eingehen, werden sie in den nächsten Monaten zu 100% übereinstimmen.

Danke fürs Lesen!

Empfohlen: