Data Sci Abenteuer - teil 4, Web-Scraping in JavaScript und Python

Veröffentlicht am 2021-07-15 17:56

Verfügbare Sprachen:

Vor kurzem habe ich auf zwei kleinen Projekten, die das Web-Scraping benutzt, gearbeitet. Das Projekt in Python war ein von meinen Nebenprojekten und das Projekt in JavaScript war ein Hausaufgabe von einer potentielle Stelle.

Deutsch ist meine dritte Sprache und ich bin nicht gewöhnt auf Deutsch zu schreiben. Entschuldigen Sie, bitte, meine Fehler.

Falls jemand interessiert sich um meine Entscheidung, ich entschied nicht zu weitergehen.

Die einzige Dinge, die sie brauchen zu wissen, sind CSS-Selektoren.

Herunterladen der Daten

Beide Fälle als der erste Schritt lädt die Daten herunter und auch beide Sprachen brauchen die Bibliotheken. In Python gibt es requests und in JavaScript axios.

npm install axios # installiert axios Bibliothek in JavaScript
pip install requests # installiert requests Bibliothek in Python

Vielleicht der größte Unterschied zwischen requests und axios ist die Asynchronizität. requests wartet auf die Antwort (synchron) aber axios wartet nicht (asynchron) und JavaScript führt den folgenden Code aus. Wenn wir axios synchron werden wollen, müssen wir await nutzen.

Die Nutzung des requests:

import requests

data = requests.get("url")

Und axios:

const { data } = await axios.get("url");

// Oder

await axios.get("url")
.then((res) => { // process data })
.catch((err) => { //deal with errors })

Arbeit mit der Daten

Die Arbeit mit den Daten ist ganz ähnlich in beiden Sprachen. Beide brauchen externe Bibliotheken und beide Sprachen bieten Handvoll Möglichkeiten an. In JavaScript wählte ich JSDOM weil ich ganz good mit querySelector bin. Und in Python wählte ich BeautifulSoup, weil auf freeCodeCamp gut geschriebenes Tutorial ist.

In beiden Sprachen sollen wir als erst die Daten importieren.

from bs4 import BeautifulSoup

soup = BeautifulSoup(data, 'html.parser')
const { JSDOM } = require("jsdom")


const dom = new JSDOM(data, {
runScripts: "dangerously",
resources: "usable"
});

Eine einfache Abfrage in JSDOM ist die gleiche wie in JavaScript im Browser. Der folgende Code gibt uns den ersten div zurück.

document.querySelector("div")

Ob man alle div-Tag will, nutzt man den nächsten Befehl:

document.querySelectorAll("div")

Etwas zu erinnern ist, dass es holt NodeList zurück und NodeList ist kein Array. So die Methode .map() funktioniert nicht.

BeautifulSoup bietet zwei Methoden die Tagen zurückzuholen. Die erste ist find() und find_all() Funktionen. Sie haben die gleichen Parameter. find() holt nur das erste Tag zurück und find_all() alle. Das nächste Beispiel wird das erste div finden:

soup.find("div")

Man kann auch andere Parameter nutzen die Ergebnisse zu filtern, z.B. class:

soup.find("div", class="square")

BeautifulSoup erlaubt den CSS-Selektoren.

soup.select("div") # ist gleich wie document.querySelectorAll("div")

Ressourcen