** 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.
Was in diesem Artikel zu sagen
Instanziierung der Alibaba Cloud Windows-Instanz
Installation
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/
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.
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.
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