So automatisieren Sie Web Scraping mit wenigen Klicks

Automatisieren Sie die Datenübermittlung durch Webhooks

Was ich an DataPipeline besonders schätze, ist die Möglichkeit, Daten mithilfe von Webhooks direkt an meine Anwendungen zu übermitteln. Dieser Webhook fungiert als Endpunkt, an den die DataPipeline die Scraped-Daten sendet, sodass das manuelle Herunterladen und Übertragen von Daten entfällt.

Einrichten eines Webhooks

Bevor Sie die Webhook-Funktionalität in DataPipeline nutzen können, müssen Sie eine Webhook-URL eingerichtet haben. Um es einfacher zu machen, zeige ich Ihnen zwei Optionen:

  • Eine No-Code-Option – ideal zum Testen oder für ernsthafte Projekte in der kostenpflichtigen Version

  • Erweitertes Webhook-Setup mit Flask und Ngrok

Webhook-Einrichtung ohne Code

Eine einfache Lösung für den schnellen Einstieg in Webhooks ist die Verwendung von Webhook.site. Wenn Sie die Site besuchen, wird automatisch eine eindeutige Webhook-URL generiert. Kopieren Sie diese URL als Ihren Webhook-Endpunkt, um die Scraping-Ergebnisse zu erhalten.

Einrichten eines Webhook-SetupsEinrichten eines Webhook-Setups

Auf diese Weise können Sie die eingehenden Daten schnell und einfach testen und anzeigen.

Webhook-Scraping ergibt eingehende Daten Webhook-Scraping ergibt eingehende Daten

Ohne einen kostenpflichtigen Plan speichert Webhook.site die Daten jedoch nur 7 Tage lang, danach werden sie verworfen.

Einrichten eines Webhooks mit Flask und Ngrok

Während die Überprüfung des Inhalts einer Webhook-Nutzlast nützlich sein kann (z. B. durch Weiterleiten des Webhooks an Tools wie webhook.site), benötigen Entwickler auch die Möglichkeit, eingehende Webhooks direkt in ihrer Anwendung zu empfangen.

So können Sie dies mit Flask, einem leichten Web-Framework für Python, und Ngrok, einem Tool, das lokale Server dem öffentlichen Internet zugänglich macht, tun:

  1. Installieren Flasche Und Ngrok

Sie können Flask mit pip installieren:

So installieren Sie Ngrok

  • Unter Windows (mit Chocolatey):
  • Unter macOS (mit Homebrew):

Sie können Ngrok für andere Betriebssysteme direkt von der offiziellen Website herunterladen.

  1. Konfigurieren Sie Ihr Authentifizierungstoken (einmalige Einrichtung)

Um Ngrok zu verwenden, müssen Sie es mithilfe eines Authentifizierungstokens mit Ihrem Konto verbinden. Holen Sie sich Ihr Authtoken von Ihrem Ngrok-Dashboard.

Konfigurieren Ihres AuthtokensKonfigurieren Ihres Authtokens

Öffnen Sie Ihr Terminal oder Ihre Eingabeaufforderung und führen Sie den folgenden Befehl aus.
$YOUR_AUTHTOKEN mit Ihrem tatsächlichen Authentifizierungstoken:

1
ngrok config add-authtoken $YOUR_AUTHTOKEN
  1. Erstellen Sie einen Flask-Webhook-Server

Lassen Sie uns eine einfache Flask-Anwendung erstellen, um eingehende Webhook-Anfragen zu verarbeiten. Speichern Sie den folgenden Code in einer Datei namens webhook.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
from flask import Flask, request, jsonify
import csv
import io
import zipfile
from werkzeug.utils import secure_filename
 
app = Flask(__name__)
 
@app.route('/webhook', methods=('POST'))
def webhook():
    content_type = request.headers.get('Content-Type')
 
    if content_type == 'application/json':
        data = request.json
        print("Received JSON data:", data)
    elif content_type == 'text/csv':
        data = request.data.decode('utf-8')
        csv_reader = csv.reader(io.StringIO(data))
        csv_data = (row for row in csv_reader)
        print("Received CSV data:", csv_data)
    elif content_type.startswith('multipart/form-data'):
        files = request.files
        for filename, file in files.items():
            print(f"Received file: {filename}")
            file.save(secure_filename(file.filename))
            if filename.endswith('.zip'):
                with zipfile.ZipFile(file, 'r') as zip_ref:
                    zip_ref.extractall('extracted_files')
                    print(f"Extracted files: {zip_ref.namelist()}")
    elif content_type == 'application/zip':
        file = request.data
        with open('received.zip', 'wb') as f:
            f.write(file)
        with zipfile.ZipFile(io.BytesIO(file), 'r') as zip_ref:
            zip_ref.extractall('extracted_files')
            print(f"Extracted files: {zip_ref.namelist()}")
    else:
        data = request.data.decode('utf-8')
        print("Received raw data:", data)
    # process the data as needed - eg add to a database/ perform analysis
    return jsonify({'status': 'success', 'data': 'Processed data'}), 200
 
if __name__ == '__main__':
    app.run(port=5000)

Dieser Code erstellt eine einfache Flask-Anwendung, die auf eingehende POST-Anfragen am Endpunkt „/webhook“ wartet. Sie kann verschiedene Inhaltstypen verarbeiten, z. B. JSON, CSV, Rohdaten und ZIP-Dateien. Außerdem extrahiert und speichert sie die empfangenen Daten im aktuellen Arbeitsverzeichnis. Die Daten können bei Bedarf weiterverarbeitet werden, z. B. indem sie in einer Datenbank gespeichert oder analysiert werden.

  1. Ausführen der Flask-Anwendung

Sie können jetzt Ihre Flask-Anwendung ausführen:

  1. Starten Sie Ngrok

Öffnen Sie ein neues Terminalfenster und starten Sie Ngrok, um Ihren lokalen Flask-Server verfügbar zu machen:

Ngrok generiert eine öffentliche URL, die Anfragen an Ihre lokale Flask-Anwendung weiterleitet. Kopieren Sie die „Weiterleitung„“ URL, die Ngrok bereitstellt; Sie verwenden diese URL als Ihren Webhook-Endpunkt in DataPipeline.

Ngrok generiert eine URL-WeiterleitungsanforderungNgrok generiert eine URL-Weiterleitungsanforderung
  1. Fügen Sie den Webhook zu DataPipeline hinzu

Suchen Sie in Ihren DataPipeline-Projekteinstellungen nach den Ausgabeeinstellungen:

Hinzufügen des Webhooks zu DataPipelineHinzufügen des Webhooks zu DataPipeline

Wählen Sie „Webhook“ als bevorzugte Methode, fügen Sie die von Ngrok bereitgestellte Webhook-URL ein und hängen Sie den Endpunkt „/webhook“ daran an.

Auswählen von Webhook als Ausgabe in DataPipelineAuswählen von Webhook als Ausgabe in DataPipeline

DataPipeline sendet die Scraped-Daten automatisch an Ihre Webhook-URL.

1
2
3
Received file: result
127.0.0.1 - - (25/Jun/2024 15:32:36) "POST /webhook HTTP/1.1" 200 -
Extracted files: ('job-11814822-result.jsonl')

Sie können Ihren Webhook-Dienst oder Server so konfigurieren, dass die Daten nach Bedarf verarbeitet werden, sei es durch Speichern in einer Datenbank, Senden von Benachrichtigungen oder Auslösen anderer automatisierter Aktionen.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
  (
  {
      "input": "B0CHJ5LJZG",
      "result": {
          "name": "Wireless Earbuds, 2024 Wireless Headphones HiFi Stereo Earphones with 4 ENC Noise Canceling Mic, 42Hs Playtime In Ear Earbud, Bluetooth 5.3 Sport Earphones with LED Power Display for Android iOS White",
          "product_information": {
              "model_name": "A60PW-USM",
              "connectivity_technology": "Wireless",
              "wireless_communication_technology": "Bluetooth",
              "special_feature": "Lightweight, Noise Isolation, Volume-Control, Microphone Feature, Sports & Exercise",
              "included_components": "Charging case *1, Type-C Charging Cable*1, User Manual*1, 3 Pairs of Ear Tips(S M L ), Wireless Earbuds*2",
              "age_range_description": "Adult",
              "material": "Plastic",
              "specific_uses_for_product": "Sports & Exercise, Running",
              "charging_time": "1.5 Hours",
              "compatible_devices": "Compatible devices with Bluetooth 5.3 or earlier, … (TRUNCATED)",
              "control_type": "Media Control",
              "cable_feature": "Without Cable",
              "item_weight": "0.634 ounces",
              "control_method": "Touch, Voice",
              "number_of_items": "1",
              "audio_driver_type": "Dynamic Driver",
              "bluetooth_range": "15 Meters",
              "bluetooth_version": "5.3",
              "carrying_case_battery_charging_time": "1.5 Hours",
              "audio_driver_size": "13 Millimeters",
              "earpiece_shape": "Rounded Tip",
              "manufacturer": "Aoslen",
              "package_dimensions": "4.17 x 3.27 x 1.46 inches",
              "asin": "B0CHJ5LJZG",
              "item_model_number": "A60Pro",
              "batteries": "1 Lithium Ion batteries required. (included)",
              "customer_reviews": {
                  "ratings_count": 3154,
                  "stars": 4.5
              },
              "best_sellers_rank": (
                  "#267 in Electronics (See Top 100 in Electronics)",
                  "#48 in Earbud & In-Ear Headphones"
              ),
              "date_first_available": "September 7, 2023"
          },
          "brand": "Brand: Aoslen",
          "full_description": "From the brand Aoslen Wireless Earbuds                                      If you have any questions, … (TRUNCATED)",
          "pricing": "$19.99",
          "list_price": "$49.99",
          "shipping_price": "FREE",
          "availability_status": "In Stock",
          "is_coupon_exists": false,
          "images": (
              "https://m.media-amazon.com/images/I/41nBiguTHfL.jpg", (TRUNCATED)
          ),
          "product_category": "Electronics \u203a Headphones, Earbuds & Accessories \u203a Headphones & Earbuds \u203a Earbud Headphones",
          "average_rating": 4.5,
          "feature_bullets": (
              "2024 New Bluetooth 5.3 Technology: Bluetooth in ear headphones equipped with new version of bluetooth 5.3 chip, using better chip and technology. Transmit high quality lossless audio coding, ensure more stable connection, lower latency and lower power consumption during data transmission. With a stable connection distance of up to 15 meters, you can easily control your music and phone at home, in the office and on the go", (TRUNCATED)
          ),
          "total_reviews": 3154,
          "model": "A60Pro",
          "customization_options": {
              "color": (
                  {
                      "is_selected": false,
                      "url": "https://www.amazon.com/dp/B0BVQG2LVW/ref=twister_B0D14MT3VB?_encoding=UTF8&psc=1",
                      "value": "Black",
                      "price_string": "$19.99",
                      "price": 19.99,
                      "image": "https://m.media-amazon.com/images/I/41cGPiRmLHL.jpg"
                  }, (TRUNCATED)
              )
          },
          "ships_from": "Amazon",
          "sold_by": "Aoslen US",
          "aplus_present": true
      }
  },
)

Scrapen einer dynamischen Liste von Webseiten

Die Fähigkeit von DataPipeline, Webhooks als Eingabe zu akzeptieren, eröffnet eine völlig neue Ebene der Automatisierung für Ihre Web-Scraping-Projekte. Jetzt können Sie dynamische Listen von URLs, ASINs, Produkt-IDs oder sogar Suchanfragen scrapen, ohne Ihre DataPipeline-Projekte manuell aktualisieren zu müssen.

Stellen Sie sich vor, Sie möchten Google-Suchergebnisse für eine Liste mit Parfümanfragen verfolgen, die sich regelmäßig ändern. Anstatt Ihr Projekt in DataPipeline bei jeder Änderung Ihrer Liste manuell zu aktualisieren, können Sie den gesamten Prozess automatisieren.

Erstellen Sie einen Webhook zum Bereitstellen von Suchanfragen

Erstellen wir mit Flask einen Webhook-Endpunkt, um der DataPipeline eine Liste mit Suchanfragen bereitzustellen. Ich speichere meine Suchanfragen in einer CSV-Datei, aber Sie können dies problemlos anpassen, um Abfragen aus einer Datenbank oder einer anderen dynamischen Quelle abzurufen.

  1. Ein … kreieren parfüm_queries.csv Datei

Erstellen Sie eine CSV-Datei mit dem Namen parfüm_queries.csv und fügen Sie Ihre Liste mit Suchanfragen hinzu, eine pro Zeile (ohne Kopfzeile). Beispiel:

1
2
3
4
5
6
7
8
9
10
11
Perfume
Blue de Chanel
Dior Sauvage
Gucci Guilty
Versace Eros
Calvin Klein Euphoria
Marc Jacobs Daisy
Yves Saint Laurent Black Opium
Tom Ford Black Orchid
Initio Oud For Greatness
Paco Rabanne 1 Million
  1. Erstellen Sie den Flask-Webhook:

Erstellen Sie eine Python-Datei (z. B. querys_webhook.py) und fügen Sie den folgenden Flask-Code hinzu:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
from flask import Flask, jsonify
import csv
 
app = Flask(__name__)
 
def read_queries_from_csv(filepath):
    with open(filepath, newline='', encoding='utf-8') as csvfile:
        reader = csv.reader(csvfile)
        next(reader)  # Skip the header row
        queries = (row(0) for row in reader if row)  # One query per row
    return queries
 
@app.route('/queries', methods=('GET'))
def provide_queries():
    queries = read_queries_from_csv('perfume_queries.csv')
    return jsonify(queries)
 
if __name__ == '__main__':
    app.run(debug=True, port=5000)

Hier definieren wir eine Flask-App mit einem „Route /Abfragen“, das die Suchanfragen aus Ihrer CSV-Datei liest und sie im JSON-Format zurückgibt.

  1. Führen Sie die Flask-App aus:

Starten Sie Ihre Flask-Anwendung:

1
python queries_webhook.py
  1. Ausstellen mit Ngrok:

Verwenden Sie Ngrok (wie im vorherigen Abschnitt erläutert), um eine öffentlich zugängliche URL für Ihren lokalen Flask-Webhook zu erstellen:

Kopieren Sie die von Ngrok bereitgestellte Weiterleitungs-URL.

Ngrok generiert eine URL-WeiterleitungsanforderungNgrok generiert eine URL-Weiterleitungsanforderung

Erstellen Sie ein Google-Suchprojekt in DataPipeline

Gehen Sie zu Ihrem DataPipeline-Dashboard und erstellen Sie ein neues Projekt mit dem „Google-Suche“ Vorlage.

Erstellen eines Google-Suchprojekts in DataPipelineErstellen eines Google-Suchprojekts in DataPipeline

Anstatt Suchbegriffe manuell einzugeben, fügen Sie die Ngrok-Weiterleitungs-URL (die auf Ihren /queries-Webhook verweist) in das Eingabefeld in DataPipeline ein.

Eingeben der Suchbegriffe in DataPipelineEingeben der Suchbegriffe in DataPipeline

DataPipeline ruft automatisch Ihren Webhook auf, holt die neueste Liste der Suchanfragen ab und verwendet sie als Eingabe zum Scraping der Google-Suchergebnisse. Jetzt haben Sie eine vollautomatische Pipeline, in der alle Aktualisierungen Ihrer
parfüm_queries.csv Die Datei wird ohne manuelles Eingreifen in Ihren Scraped-Daten angezeigt!

Lesen Sie auch: So scrapen Sie Google Shopping mit Python

Einpacken

In diesem Handbuch habe ich Ihnen gezeigt, wie Sie Web Scraping mit ScraperAPIs DataPipeline automatisieren können.

  • Sie haben gelernt, wie Sie Scraping-Projekte mit DataPipeline automatisieren,
  • Eingabedaten dynamisch mit Webhooks konfigurieren,
  • Automatisieren Sie die Datenübermittlung durch Webhooks

DataPipelines vereinfacht das Web Scraping und erleichtert das Sammeln der benötigten Daten in großem Umfang. Bereit, es auszuprobieren? Registrieren Sie sich für ein kostenloses ScraperAPI-Konto und probieren Sie DataPipeline noch heute aus. Bis zum nächsten Mal, viel Spaß beim Scraping!

Mein Name ist Kadek und ich bin ein Student aus Indonesien und studiere derzeit Informatik in Deutschland. Dieser Blog dient als Plattform, auf der ich mein Wissen zu Themen wie Web Scraping, Screen Scraping, Web Data Mining, Web Harvesting, Web Data Extraction und Web Data Parsing teilen kann.