Erstellen Sie mit Selenium einen Datenerfassungsbot in Python

** Selenium Web Driver ** ist eine Erweiterung des ** Python ** Toolkits. Mit ** Selenium ** können Sie das Benutzerverhalten nachahmen und sich täglich wiederholende Aufgaben wie das Scraping von Daten automatisieren.

Überblick

Was in diesem Artikel zu sagen

  1. Instanziierung der Alibaba Cloud Windows-Instanz

  2. Installation

  1. Schreiben Sie ein Python Selenium-Skript, um den Kryptomarkt zu überprüfen

Melden Sie sich bei Ihrer Alibaba Cloud Windows-Instanz an, um loszulegen.

Installation Öffnen Sie den Internet Explorer und gehen Sie zu mozilla.org. Möglicherweise müssen Sie der integrierten Windows-Firewall einige Ausnahmen hinzufügen, damit der Download des Firefox-Installationsprogramms wirksam wird.

Laden Sie Firefox von www.mozilla.org herunter.

Laden Sie das Python 3.7.1 MSI-Installationsprogramm von http://www.python.org/download/ herunter.

Führen Sie das Installationsprogramm aus. Stellen Sie sicher, dass Sie die Option zum Hinzufügen von Python zu Ihrem PATH während der Installation aktivieren.

Die Windows-Version von Python 3.7.1 enthält ein Pip-Installationsprogramm. Es macht es einfach, alle benötigten Python-Module zu installieren. Insbesondere handelt es sich um einen Selenium-Webtreiber.

Wechseln Sie zur Windows Power Shell-Oberfläche und überprüfen Sie, ob Python erfolgreich installiert wurde.

python --version

Hier wird Python 3.7.1 als Beispiel genommen. Lassen Sie uns Selenium sofort mit pip installieren.

pip install selenium

Jetzt müssen Sie den entsprechenden Webtreiber für Selenium installieren. Ich verwende Mozilla als Browser, daher benötige ich einen Gecko-Treiber. Der Vorgang ähnelt der Installation eines Chrome-Webtreibers.

https://github.com/mozilla/geckodriver/releases/download/v0.23.0/geckodriver-v0.23.0-win64.zip

Speichern Sie den Link zu einer lokalen Datei auf Ihrer Alibaba Windows-Instanz. Dann entpacken Sie den Reißverschluss. Entpacken Sie es auf Ihren Desktop und fügen Sie die Datei Ihrem Power Shell-Systempfad hinzu, um sie anzuzeigen.

setx path "%path%;c:\Users\Administrator\Desktop\geckodriver.exe"

Lassen Sie uns nun die Entwicklungsumgebung organisieren. Sie können auch den Editor verwenden, um Code zu schreiben. Ich bevorzuge Notepad ++, eine kostenlose Open-Source-IDE zur Hervorhebung der Syntax.

https://notepad-plus-plus.org/downloads/v7.8.2/

Python-Skript

Lassen Sie uns nun entscheiden, was der Python Selenium "Web Bot" tun soll. Wenn unser "Bot" einige Marktdaten für Kryptowährungen für uns erhält, ist das cool. Schreiben Sie diese Daten in eine lokale Datei. Sie können diese Daten dann in andere Alibaba-Cloud-Dienste einbinden. Machen Sie sich bereit für die Eingabe.

Beginnen wir jetzt mit der Codierung. Starten Sie die IDE und importieren Sie Selen. Wir werden auch Zeit und Datum importieren, wie wir später sehen werden.

from selenium import webdriver
import datetime
import time

Erstens können Sie Selen tatsächlich etwas tun lassen und wissen, was Sie erwartet.

browser = webdriver.Firefox()
browser.get("http://www.baidu.com/")

Speichern Sie die Datei mit der Erweiterung .py.

Doppelklicken Sie auf die Datei.

Mit drei Codezeilen öffnet der Selenium-Webtreiber jetzt programmgesteuert Webseiten.

Jetzt erstellen wir eine "Bot" -Klasse.

Es ist eine gute Idee, darüber nachzudenken, was das Programm erreichen möchte.

Ich mache das gerne Schritt für Schritt. Dann werden wir diese Schritte in die Funktionen des Bots aufteilen.

  1. Ich möchte programmgesteuert eine Webseite aufrufen
  2. Ich möchte einige Daten kratzen
  3. Ich möchte die Daten als Variable übergeben
  4. Ich möchte die Daten in einer Datei in der Cloud speichern

Definieren wir zunächst eine grundlegende Selenium "Bot" -Klasse.

from selenium import webdriver

class Bot():
    def __init__(self,url):
        self.browser = webdriver.Firefox()
        self.url = url
    def get_web_page(self):
        self.browser.get(self.url)
bot = Bot("http://www.baidu.com/")
bot.get_web_page()

Das ist eine rationalere klassenbasierte Struktur für die Organisation unserer Programme.

Stellen Sie die Klasse ein. Definieren Sie die Browservariable als Firefox Webdriver. Definiert die URL, die an die Klasse übergeben werden soll. Erstellen Sie als Nächstes eine grundlegende Funktion zum Abrufen von Webseiten und rufen Sie den Browser mit der URL auf, die Sie bei der Initialisierung definiert haben.

Lassen Sie uns das Skript ausführen. Das Skript initialisiert und führt die Bot-Klasse aus. Der Selenium-Webdriver öffnet ein Firefox-Browserfenster und wechselt zu www.baidu.com.

Definieren Sie zuvor die verschlüsselte Datenerfassungsfunktion. Gehen Sie zu www.coinwatch.com und rufen Sie den xpath des Elements ab, für das Sie Daten abrufen möchten. Dann kratzen Sie die Bitcoin-Marktdaten.

Die Webentwickler-Tools von Firefox sind eine gute Wahl für diese Aufgabe und verwenden sie, um den xpath für das gewünschte Element zu finden.

Gehen Sie zu www.coinwatch.com und bewegen Sie die Maus über die Suchleiste in der oberen rechten Ecke. 1.png

Klicken Sie mit der rechten Maustaste auf ein Element im Suchfeld und wählen Sie im Menü die Option Element untersuchen.

Am unteren Rand der Seite wird ein Inspektorfenster mit den hervorgehobenen Elementen geöffnet. Klicken Sie im Inspektor mit der rechten Maustaste auf den markierten Text. Gehen Sie zum Untermenü Kopieren und wählen Sie Xpath kopieren. Dadurch wird der Xpath des Elements im Clip gespeichert und in Ihr Python Selenium-Skript eingefügt. Lassen Sie uns auch den xpath zum Post-Button bekommen.

Lass uns anfangen

from selenium import webdriver
class Bot():
    def __init__(self,crypto):
        self.browser = webdriver.Firefox()
        ### CRYPTO TO SEARCH FOR
        self.crypto = crypto
    def get_crypto_data(self):
        self.browser.get("https://www.coinwatch.com/")
        ### FIND SEARCH FORM AND IMPUTE KEY WORD
        print("FINDING SEARCH FORM")
        element = self.browser.find_element_by_xpath("//html/body/div[1]/div/div/div/div/header/section[3]/div/div/div/div[1]/div/input")
        element.clear()
        element.send_keys(self.crypto)
        element = self.browser.find_element_by_xpath("//html/body/div[1]/div/div/div/div/header/section[3]/div/div/div/div[1]/div/div/button")
        element.click()


bot = Bot("BTC")
bot.get_crypto_data()

Oben wird der Webtreiber initialisiert. Hier definieren wir die Variable Krypto, die der Suchbegriff für Kryptowährungen ist. Übergeben Sie diese Kryptovariable dann an die Klasse, geben Sie den Parameter self an und übergeben Sie ihn an die Funktion get_crypto_data. Die Funktion get_crypto_data ruft einen Webbrowser auf, um https://www.coinwatch.com/ abzurufen. Suchen Sie beim Aufrufen der Webseite nach dem Element im kopierten xpath. Das erste Element ist das Suchfeld. Löschen Sie zuerst das Suchelement und senden Sie dann die Kryptovariable als Argument. Suchen Sie dann die Schaltfläche "Senden" und klicken Sie darauf. Instanziieren Sie einen Bot als Bot und übergeben Sie "BTC" als Krypto, nach der Sie suchen möchten.

Sie müssen zur Hauptseite von Bitcoin gehen. Jetzt haben wir die Möglichkeit, alle Xpaths abzurufen und in jedes Element zu kopieren, für das wir Daten sammeln möchten. Im Moment denken wir, wir brauchen Preis, Obergrenze, 24-Stunden-Volumen und 24-Stunden-Variation. Erstellen wir eine Variable, um diese Werte in unserem Skript zu speichern. Übergeben Sie dann die klassenweiten Variablen an die Funktion get_crypto_data. Sobald das Element vorhanden ist, verwenden Sie die .text-Methode von Selenium, um den Textinhalt des Elements abzurufen. Dann drucken Sie es am Terminal aus. Abhängig von der Webseite kann das Laden des DOM-Elements einige Zeit dauern. Wenn Sie also eine Fehlermeldung erhalten, z. B. dass das Element nicht gefunden wird, müssen Sie möglicherweise einige Zeit warten. Der einfachste Weg, dies zu tun, ist die Verwendung von time.sleep ().

Lassen Sie uns dies tun und sehen, was passiert.

from selenium import webdriver
import datetime
import time

class Bot():
    def __init__(self,crypto):
        self.browser = webdriver.Firefox()
        ### CRYPTO TO SEARCH FOR
        self.crypto = crypto
        self.price = None
        self.cap = None
        self.volume_24h = None
        self.change_24h = None
    def get_crypto_data(self):
        self.browser.get("https://www.coinwatch.com/")
        ### FIND SEARCH FORM AND IMPUTE KEY WORD
        print("FINDING SEARCH FORM")
        elem = self.browser.find_element_by_xpath("//html/body/div[1]/div/div/div/div/header/section[3]/div/div/div/div[1]/div/input")
        elem.clear()
        elem.click()
        elem.send_keys(self.crypto)
        elem = self.browser.find_element_by_xpath("//html/body/div[1]/div/div/div/div/header/section[3]/div/div/div/div[1]/div/div/button")
        time.sleep(1)
        elem.click()
        ### GET MARKET DATA
        print("GETTING MARKET DATA")
        time.sleep(5)
        self.price = self.browser.find_element_by_xpath("//html/body/div[1]/div/div/div/div/main/div/div/article/div[1]/div/div[3]/div/div/span").text
        self.cap = self.browser.find_element_by_xpath("//html/body/div[1]/div/div/div/div/main/div/div/article/div[2]/div/main/div[1]/section/div[1]/div/div[2]/div/div[1]/span[2]").text
        self.volume_24h = self.browser.find_element_by_xpath("//html/body/div[1]/div/div/div/div/main/div/div/article/div[2]/div/main/div[1]/section/div[1]/div/div[2]/div/div[2]/span[2]").text
        self.change_24h = self.browser.find_element_by_xpath("//html/body/div[1]/div/div/div/div/main/div/div/article/div[2]/div/main/div[1]/section/div[1]/div/div[2]/div/div[8]/span[2]").text
        print("PRINTING MARKET DATA")
        print("PRICE " + str(self.price))
        print("CAP " + str(self.cap))
        print("24H VOLUME " + str(self.volume_24h))
        print("24H CHANGE " + str(self.change_24h))
        self.browser.close()
        return
bot = Bot("BTC")
bot.get_crypto_data()

Jetzt haben Sie die Daten als Variable, die Sie an die gesamte Bot-Klasse übergeben können. Übergeben wir dies an die Funktion write_file. Anschließend wird das System gestempelt und in einer lokalen Datei in der Alibaba-Cloud gespeichert.

def write_file(self):
    save_file = open(self.crypto + "_market.txt","a")
    time_stamp = str(datetime.now())
    save_file.write("\n" + time_stamp + "\n")
    save_file.write("\nPRICE: " + str(self.price))
    save_file.write("\nCAP: " + str(self.cap))
    save_file.write("\n24H VOLUME: " + str(self.volume_24h))
    save_file.write("\n24H CHANGE: " + str(self.change_24h))

Im obigen Code wird die Datei, in der die Kryptovariable mit market.txt verkettet ist, als zu schreibender Dateiname geöffnet. a "öffnet die Datei im Anhangsmodus, überschreiben Sie also nicht die vorherigen Daten. Erstellen Sie dann eine Variable time_stamp, um Datum und Uhrzeit als Zeichenfolgen aufzurufen. Erstellen Sie dann die Marktdaten als Zeichenfolgen. Schreiben Sie in save_file als. Der Teil, in dem "n" verkettet ist, ist ein Zeilenumbruch, sodass nicht alles in eine Zeile passt.

Natürlich können Sie jede Verschlüsselung auf diese Weise kratzen, indem Sie die Argumente beim Initialisieren der Bot-Klasse ändern. Lassen Sie uns die Marktdaten von Etherium abkratzen.

btc_bot = Bot("BTC")
eth_bot = Bot("ETH")
btc_bot.get_crypto_data()
btc_bot.write_file()
eth_bot.get_crypto_data()
eth_bot.write_file()

Jetzt haben Sie eine automatisierte Möglichkeit, das Dataset abzurufen und als Variable zurückzugeben. Sie können dies in eine lokale Datei schreiben. Diese Daten können beispielsweise in Alibaba-Dienste für maschinelles Lernen zur Datenanalyse oder in relationale Datenbanken zur Nachverfolgung eingebunden werden.

Unten ist der endgültige Code.

from selenium import webdriver
from datetime import datetime
import time

class Bot():

    def __init__(self,crypto):
        self.browser = webdriver.Firefox()
        ### CRYPTO TO SEARCH FOR
        self.crypto = crypto
        self.price = None
        self.cap = None
        self.volume_24h = None
        self.change_24h = None
    def get_crypto_data(self):
        self.browser.get("https://www.coinwatch.com/")
        ### FIND SEARCH FORM AND IMPUT KEY WORD
        print("FINDING SEARCH FORM")
        elem = self.browser.find_element_by_xpath("//html/body/div[1]/div/div/div/div/header/section[3]/div/div/div/div[1]/div/input")
        elem.clear()
        elem.click()
        elem.send_keys(self.crypto)
        elem = self.browser.find_element_by_xpath("//html/body/div[1]/div/div/div/div/header/section[3]/div/div/div/div[1]/div/div/button")
        time.sleep(1)
        elem.click()
        ### GET MARKET DATA
        print("GETTING MARKET DATA")
        time.sleep(5)
        self.price = self.browser.find_element_by_xpath("//html/body/div[1]/div/div/div/div/main/div/div/article/div[1]/div/div[3]/div/div/span").text
        self.cap = self.browser.find_element_by_xpath("//html/body/div[1]/div/div/div/div/main/div/div/article/div[2]/div/main/div[1]/section/div[1]/div/div[2]/div/div[1]/span[2]").text
        self.volume_24h = self.browser.find_element_by_xpath("//html/body/div[1]/div/div/div/div/main/div/div/article/div[2]/div/main/div[1]/section/div[1]/div/div[2]/div/div[2]/span[2]").text
        self.change_24h = self.browser.find_element_by_xpath("//html/body/div[1]/div/div/div/div/main/div/div/article/div[2]/div/main/div[1]/section/div[1]/div/div[2]/div/div[8]/span[2]").text
        print("PRINTING MARKET DATA")
        print("PRICE " + str(self.price))
        print("CAP " + str(self.cap))
        print("24H VOLUME " + str(self.volume_24h))
        print("24H CHANGE " + str(self.change_24h))
        self.browser.close()
        return

    def write_file(self):

        time_stamp = str(datetime.now())

        save_file = open(self.crypto + "_market.txt","a")
        save_file.write(self.crypto)
        save_file.write("\n" + time_stamp + "\n")
        save_file.write("\nPRICE: " + str(self.price))
        save_file.write("\nCAP: " + str(self.cap))
        save_file.write("\n24H VOLUME: " + str(self.volume_24h))
        save_file.write("\n24H CHANGE: " + str(self.change_24h) + "\n")

btc_bot = Bot("BTC")
eth_bot = Bot("ETH")

btc_bot.get_crypto_data()
btc_bot.write_file()

eth_bot.get_crypto_data()
eth_bot.write_file()

Recommended Posts

Erstellen Sie mit Selenium einen Datenerfassungsbot in Python
Erstellen Sie eine GIF-Datei mit Pillow in Python
Erstellen Sie eine MIDI-Datei in Python mit pretty_midi
Erstellen Sie eine Funktion in Python
Erstellen Sie ein Wörterbuch in Python
Erstellen Sie mit tkinter eine Python-GUI
Erstellen Sie einen DI-Container mit Python
Erstellen Sie eine Binärdatei in Python
Erstellen Sie eine zufällige Zeichenfolge in Python
Erstellen Sie mit Django einen LINE-Bot
Generieren Sie eine erstklassige Sammlung in Python
Erstellen Sie eine einfache GUI-App in Python
[Python] Erstellen Sie eine Stapelumgebung mit AWS-CDK
[Python] [LINE Bot] Erstellen Sie einen LINE Bot mit Papageienrückgabe
Holen Sie sich Youtube-Daten in Python mithilfe der Youtube-Daten-API
Scraping von Websites mit JavaScript in Python
Entwicklung eines Slack Bot mit Python mit chat.postMessage
[GPS] Erstellen Sie eine kml-Datei mit Python
Zeichnen Sie mit graphviz eine Baumstruktur in Python 3
Erstellen Sie mit dem Python-Anforderungsmodul einen Datensatz mit Anhängen in KINTONE
[Python] [Word] [python-docx] Versuchen Sie, mit python-docx eine Vorlage für einen Wortsatz in Python zu erstellen
Erstellen Sie in 1 Minute eine Vim + Python-Testumgebung
Erstellen Sie mit Minette für Python einen LINE BOT
Ich möchte mit Python ein Fenster erstellen
Erstellen Sie in Python ein Diagramm der Standardnormalverteilung
So erstellen Sie eine JSON-Datei in Python
Erstellen Sie eine virtuelle Umgebung mit conda in Python
Erstellen Sie mit Kaitai Struct einen Binärdatenparser
Erstellen Sie eine Webmap mit Python und GDAL
Anzeigen von Arzneimittelbewertungen mithilfe von Listen in Python
Datenanalyse in Python: Ein Hinweis zu line_profiler
Schritte zum Erstellen eines Twitter-Bots mit Python
Erstellen Sie in Python ein einfaches Momentum-Investmentmodell
Erstellen Sie eine neue Seite im Zusammenfluss mit Python
Erstellen Sie ein Datum / Uhrzeit-Objekt aus einer Zeichenfolge in Python (Python 3.3).
Erstellen Sie in Python ein Paket mit globalen Befehlen
Erstellen Sie in KiCad ein Rahmenantennenmuster in Python
Aufgezeichnete Umgebung für die Datenanalyse mit Python
[Docker] Erstellen Sie in 3 Minuten eine jupyterLab (Python) -Umgebung!
Erstellen Sie ein Python-Modul
Erstellen Sie Spatia Lite in Python
Datenbereinigung mit Python
Erstellen Sie eine Python-Umgebung
Erstellen Sie einen Slack Bot
Erstellen Sie in Python ein elliptisches Streudiagramm, ohne eine multivariate Normalverteilung zu verwenden
Erstellen Sie Ihre eigenen Big Data in Python zur Validierung
Empfangen Sie Wörterbuchdaten von Python-Programmen mit AppleScript
Registrieren Sie gemeinsam Daten im Firestore mithilfe der CSV-Datei in Python
[CRUD] [Django] Erstellen Sie eine CRUD-Site mit dem Python-Framework Django ~ 1 ~
[LINE Messaging API] Erstellen Sie mit Python ein umfangreiches Menü
Eine Code-Sammlung, die häufig in persönlichem Python verwendet wird
[Python] Generieren Sie ValueObject mit dem vollständigen Konstruktor mithilfe von Datenklassen
Erstellen Sie ein Plug-In, das Python Doctest auf Vim ausführt (2)
Holen Sie sich LEAD-Daten mit der REST-API von Marketo in Python
Erstellen Sie ein Plug-In, um Python Doctest mit Vim (1) auszuführen.
Erstellen Sie in Python einen Dekorator, der Argumente dynamisch akzeptiert. Erstellen Sie einen Dekorator
Bis Sie Daten in eine Tabelle in Python einfügen