Web Scraping ist ein Prozess, um nützliche Informationen aus dem World Wide Web zu extrahieren. Während einer Google-Suche geht ein Web-Crawler (Bot), dh der Crawler, fast alle Inhalte im Web durch und wählt aus, was für Sie relevant ist.
Diese Idee, dass Informationen oder Wissen für alle zugänglich sein sollten, führte zur Entstehung des World Wide Web. Allerdings müssen die gesuchten Daten zur öffentlichen Nutzung zugelassen sein.
How is web scraping useful?
Wir leben im Zeitalter der Daten. Rohdaten können in nützliche Informationen umgewandelt werden, die für einen größeren Zweck verwendet werden können Bahnkratzen. Es kann verwendet werden, um die Benutzer eines Produkts zu analysieren und zu untersuchen, um das Produkt zu verbessern, mit anderen Worten, um eine Feedback-Schleife zu erstellen.
E-Commerce-Unternehmen können es verwenden, um die Preisstrategien der Wettbewerber zu studieren und dementsprechend ihre eigenen auszuarbeiten. Web Scraping kann auch für Wetter- und Nachrichtenberichte verwendet werden.
Challenges
# 1. IP-Beschränkung
Mehrere Websites begrenzen die Anzahl der Anfragen, die Sie stellen können, um die Daten der Website in einem bestimmten Zeitintervall abzurufen, indem sie Ihre IP-Adresse oder Geolokalisierung ermitteln. Sie tun dies, um böswillige Angriffe auf ihre Website zu verhindern.
# 2. Captcha
Die Unterscheidung zwischen einem echten Menschen und einem Bot, der versucht, auf die Website zuzugreifen, ist das, was Captchas tatsächlich tun. Websites verwenden es, um Spam auf der Website zu verhindern und die Anzahl der Scraper auf der Website zu kontrollieren.
# 3. Clientseitiges Rendern
Dies ist eines der größten Hindernisse für Web Scraper. Moderne Websites verwenden Frontend-Frameworks, die in der Lage sind, Single-Page-Anwendungen zu erstellen. Die meisten Single-Page-Anwendungen haben keinen vom Server gerenderten Inhalt. Stattdessen generieren sie den Inhalt nach Bedarf mit clientseitigem Javascript. Dies macht es für Scraper schwierig zu wissen, was der Inhalt einer Webseite ist. Um den Inhalt zu erhalten, müssen Sie etwas clientseitiges Javascript rendern.
The Geekflare API
A Web-Scraping-API löst die meisten Herausforderungen beim Web Scraping, da es alles für Sie erledigt. Lassen Sie uns die Geekflare-API erkunden und sehen, wie Sie sie für Web Scraping verwenden können.
Die API von Geekflare hat einen einfachen dreistufigen Prozess für Sie:
- Geben Sie eine URL zum Scrapen an
- Stellen Sie einige Konfigurationsoptionen bereit
- Holen Sie sich die Daten
Es kann die Webseite für Sie schaben und dann HTML-Rohdaten als Zeichenfolge oder in einer HTML-Datei zurückgeben, auf die über einen Link zugegriffen werden kann, je nachdem, welcher Weg für Sie funktioniert.
Verwenden der API
In diesem Tutorial erfahren Sie, wie Sie die Geekflare-API verwenden KnotenJS – eine Javascript-Laufzeitumgebung. Installieren Sie NodeJS auf Ihrem System, falls Sie dies noch nicht getan haben, bevor Sie fortfahren.
- Erstellen Sie in einem neuen Ordner eine Datei mit dem Namen
index.mjs
. Der Grund dahintermjs
Erweiterung ist, dass diese Datei als ES-Modul und nicht als Common JS-Datei betrachtet werden soll. Überprüf den Unterschied zwischen ES-Modulen und Common JS-Dateien.
- Führen Sie den Befehl aus
npm init -y
im Terminal im aktuellen Ordner oder Verzeichnis. Es wird eine erstelltpackage.json
Datei für Sie.
- Im Inneren der
package.json
Datei, ändern Sie diemain
Schlüsselwert zuindex.mjs
wenn es standardmäßig etwas anderes ist. Alternativ können Sie auch einen Schlüssel hinzufügentype
und setze seinen Wert gleichmodule
.
{
“type”: “module”
}
- Fügen Sie eine Abhängigkeit mit dem Namen hinzu
axios
durch Laufennpm i axios
Befehl im Terminal. Diese Abhängigkeit hilft uns, Abrufanforderungen an bestimmte Endpunkte zu stellen.
- Ihre
package.json
sollte ungefähr so aussehen:
{
"name": "webscraping",
"version": "1.0.0",
"description": "",
"main": "index.mjs",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "Murtuzaali Surti",
"license": "ISC",
"dependencies": {
"axios": "^1.1.3"
}
}
- Import
axios
innerhalb derindex.mjs
Datei einfach so. Hier dieimport
Das Schlüsselwort wird verwendet, da es sich um ein ES-Modul handelt. Wenn es sich um eine gewöhnliche JS-Datei handelte, wäre es dierequire
Stichwort.
import axios from ‘axios’
- Die Basis-URL für alle unsere Anfragen an die Geekflare-API ist für jeden Endpunkt gleich. Sie können es also in einer Konstante speichern.
const baseUrl = 'https://api.geekflare.com'
- Geben Sie die URL an, die Sie scrapen und von der Sie die Daten abrufen möchten.
let toScrapeURL = "https://developer.mozilla.org/en-US/"
- Erstellen Sie eine asynchrone Funktion und initialisieren Sie Axios darin.
async function getData() {
const res = await axios({})
return res
}
- In den
axios
Konfigurationsoptionen sollten Sie die Methode als angebenpost
, die URL zusammen mit dem Endpunkt, einem Header, bekannt alsx-api-key
dessen Wert der von Geekflare bereitgestellte API-Schlüssel sein wird, und schließlich adata
-Objekt, das an die Geekflare-API gesendet wird. Sie können Ihren API-Schlüssel erhalten, indem Sie zu gehen dash.geekflare.com.
const res = await axios({
method: "post",
url: `${baseUrl}/webscraping`,
headers: {
"x-api-key": "your api key"
},
data: {
url: toScrapeURL,
output: 'file',
device: 'desktop',
renderJS: true
}
})
- Wie Sie sehen können, hat das Datenobjekt die folgenden Eigenschaften:
- URL: die URL einer Webseite, die gescraped werden muss.
- Ausgabe: das Format, in dem Ihnen die Daten präsentiert werden, entweder inline als String oder in einer HTML-Datei. Inline-String ist der Standardwert.
- Gerät: der Gerätetyp, auf dem die Webseite geöffnet werden soll. Es akzeptiert drei Werte, „Desktop“, „Mobile“ und „Tablet“, wobei „Desktop“ der Standardwert ist.
- renderJS: ein boolescher Wert, der angibt, ob Sie Javascript rendern möchten oder nicht. Diese Option ist nützlich, wenn Sie mit clientseitigem Rendering arbeiten.
- Wenn Sie eine vollständige Liste der Konfigurationsoptionen wünschen, lesen Sie die offizielle Dokumentation der Geekflare-API.
- Rufen Sie die asynchrone Funktion auf und rufen Sie die Daten ab. Sie können einen IIFE (Immediately Invoked Function Expression) verwenden.
(async () => {
const data = await getData()
console.log(data.data)
})()
- Die Antwort wird in etwa so aussehen:
{
timestamp: 1669358356779,
apiStatus: 'success',
apiCode: 200,
meta: {
url: 'https://murtuzaalisurti.github.io',
device: 'desktop',
output: 'file',
blockAds: true,
renderJS: true,
test: { id: 'mvan3sa30ajz5i8lu553tcckchkmqzr6' }
},
data: 'https://api-assets.geekflare.com/tests/web-scraping/pbn0v009vksiszv1cgz8o7tu.html'
}
Parsing HTML
Um HTML zu analysieren, können Sie ein npm-Paket namens verwenden node-html-parser
und auch Daten aus HTML zu extrahieren. Wenn Sie beispielsweise den Titel einer Webseite extrahieren möchten, können Sie Folgendes tun:
import { parse } from ‘node-html-parser’
const html = parse(htmlData) // htmlData is the raw html string you get from the Geekflare API.
Alternativ, wenn Sie nur die Metadaten von einer Website möchten, können Sie verwenden Metadaten-API von Geekflare Endpunkt. Sie müssen nicht einmal HTML parsen.
Benefits of using Geekflare API
Bei Single-Page-Anwendungen werden die Inhalte oft nicht vom Server gerendert, sondern vom Browser per Javascript gerendert. Wenn Sie also die Original-URL kratzen, ohne das zum Rendern des Inhalts erforderliche Javascript zu rendern, erhalten Sie nichts als ein Containerelement ohne Inhalt darin. Lassen Sie mich Ihnen ein Beispiel zeigen.
Hier ist eine Demo-Website gebaut mit React und Vitejs. Scrape diese Seite mit der Geekflare-API, wobei die renderJS-Option auf „false“ gesetzt ist. Was hast du bekommen?
<body>
<div id="root"></div>
<body>
Es gibt nur einen Root-Container ohne Inhalt. Hier kommt die Option renderJS ins Spiel. Versuchen Sie nun, dieselbe Site zu scrapen, wobei die renderJS-Option auf true gesetzt ist. Was bekommst du?
<body>
<div id="root">
<div class="App">
<div>
<a href="https://vitejs.dev" target="_blank">
<img src="/vite.svg" class="logo" alt="Vite logo">
</a>
<a href="https://reactjs.org" target="_blank">
<img src="/assets/react.35ef61ed.svg" class="logo react" alt="React logo">
</a>
</div>
<h1>Vite + React</h1>
<div class="card">
<button>count is 0</button>
<p>Edit <code>src/App.jsx</code> and save to test HMR</p>
</div>
<p class="read-the-docs">Click on the Vite and React logos to learn more</p>
</div>
</div>
</body>
Ein weiterer Vorteil der Verwendung der Geekflare-API besteht darin, dass Sie einen rotierenden Proxy verwenden können, sodass Sie sicherstellen können, dass keine IP-Blockierung durch die Website erfolgt. Die Geekflare-API enthält die Proxy-Funktion unter ihrer Premium-Plan.
Final Words
Die Verwendung einer Web-Scraping-API ermöglicht es Ihnen, sich ohne allzu großen technischen Aufwand nur auf die gekratzten Daten zu konzentrieren. Abgesehen davon bietet die Geekflare-API auch Funktionen wie die Überprüfung defekter Links, Meta-Scraping, Website-Ladestatistiken, Screenshot-Erfassung, Website-Status und vieles mehr. All das unter einer einzigen API. Probier das aus offizielle Dokumentation der Geekflare-API um mehr zu erfahren.