** Selenium Web Driver ** est une extension de la boîte à outils ** Python **. Avec ** Selenium **, vous pouvez imiter le comportement des utilisateurs et automatiser les tâches répétitives quotidiennes telles que le scraping de données.
Que dire dans cet article
Instanciation de l'instance Windows Alibaba Cloud
Installation
--Écrire une classe pour notre "Bot"
Connectez-vous à votre instance Windows Alibaba Cloud pour commencer.
Installation Ouvrez Internet Explorer et accédez à mozilla.org. Vous devrez peut-être ajouter quelques exceptions au pare-feu Windows intégré pour que le téléchargement du programme d'installation de Firefox prenne effet.
Téléchargez Firefox sur www.mozilla.org.
Téléchargez le programme d'installation MSI Python 3.7.1 depuis http://www.python.org/download/.
Exécutez le programme d'installation. Assurez-vous de cocher l'option pour ajouter Python à votre PATH lors de l'installation.
La version Windows de Python 3.7.1 comprend un programme d'installation pip. Cela facilite l'installation de tous les modules Python dont vous avez besoin. Plus précisément, il s'agit d'un pilote Web Selenium.
Accédez à l'interface Windows Power Shell et vérifiez que Python a été correctement installé.
python --version
Ici, Python 3.7.1 est pris comme exemple. Installons Selenium avec pip immédiatement.
pip install selenium
Vous devez maintenant installer le pilote Web approprié pour Selenium. J'utilise Mozilla comme navigateur, j'ai donc besoin d'un pilote Gecko. Le processus est similaire à l'installation d'un pilote Web Chrome.
https://github.com/mozilla/geckodriver/releases/download/v0.23.0/geckodriver-v0.23.0-win64.zip
Enregistrez le lien vers un fichier local sur votre instance Windows Alibaba. Ensuite, décompressez le zip. Décompressez-le sur votre bureau et ajoutez le fichier à votre chemin système Power Shell pour le voir.
setx path "%path%;c:\Users\Administrator\Desktop\geckodriver.exe"
Maintenant, organisons l'environnement de développement. Vous pouvez également utiliser le bloc-notes pour écrire du code. Je préfère utiliser notepad ++, un IDE open source gratuit pour la coloration syntaxique.
https://notepad-plus-plus.org/downloads/v7.8.2/
Décidons maintenant ce que nous voulons que le "Web Bot" de Python Selenium fasse. Eh bien, si notre "bot" obtient des données sur le marché de la crypto-monnaie pour nous, c'est cool. Écrivez ces données dans un fichier local. Vous pouvez ensuite connecter ces données à d'autres services cloud Alibaba. Préparez-vous à participer.
Commençons maintenant par le codage. Lancez l'EDI et importez Selenium. Nous importerons également l'heure et la date / heure, comme nous le verrons plus tard.
from selenium import webdriver
import datetime
import time
Tout d'abord, vous pouvez laisser Selenium faire quelque chose et savoir à quoi vous attendre.
browser = webdriver.Firefox()
browser.get("http://www.baidu.com/")
Enregistrez le fichier avec l'extension .py.
Double-cliquez sur le fichier.
Avec trois lignes de code, le pilote Web de Selenium ouvre désormais les pages Web par programmation.
Créons maintenant une classe "Bot".
C'est une bonne idée de réfléchir à ce que le programme veut réaliser.
J'aime faire cela étape par étape. Ensuite, nous décomposerons ces étapes en fonctions du bot.
Tout d'abord, définissons une classe de base Selenium "Bot".
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()
C'est une structure de classe plus rationnelle pour organiser nos programmes.
Définissez la classe. Définissez la variable du navigateur comme Firefox Webdriver. Définit l'URL à transmettre à la classe. Créez ensuite une fonction de récupération de page Web de base et appelez le navigateur avec l'URL que vous avez définie lors de l'initialisation.
Lançons le script. Le script initialise et exécute la classe Bot. Le pilote Web Selenium ouvre une fenêtre de navigateur Firefox et accède à www.baidu.com.
Avant cela, définissez la fonction d'acquisition de données cryptées. Accédez à www.coinwatch.com et obtenez le xpath de l'élément pour lequel vous souhaitez obtenir des données. Puis grattez les données du marché Bitcoin.
Les outils de développement Web de Firefox sont un bon choix pour cette tâche, et utilisez-les pour trouver le xpath de l'élément dont vous avez besoin.
Allez sur www.coinwatch.com et déplacez votre souris sur la barre de recherche dans le coin supérieur droit.
Cliquez avec le bouton droit sur un élément dans la zone de recherche et sélectionnez Inspecter l'élément dans le menu.
Au bas de la page, une fenêtre Inspecteur avec les éléments en surbrillance s'ouvre. Cliquez avec le bouton droit sur le texte en surbrillance dans l'inspecteur. Accédez au sous-menu Copier et sélectionnez Copier Xpath. Cela enregistre le Xpath de l'élément dans le clip et le colle dans votre script Python Selenium. Obtenons également le xpath vers le bouton de publication.
Commençons
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()
Dans ce qui précède, le pilote Web est en cours d'initialisation. Ici, nous définissons la variable crypto, qui est le terme de recherche pour les crypto-monnaies. Passez ensuite cette variable de chiffrement à la classe, spécifiez le paramètre self et transmettez-le à la fonction get_crypto_data. La fonction get_crypto_data appelle un navigateur Web pour obtenir https://www.coinwatch.com/. Lorsque vous appelez la page Web, recherchez l'élément dans le xpath copié. Le premier élément est le champ de recherche. Effacez d'abord l'élément de recherche, puis envoyez la variable cryptographique en tant qu'argument. Ensuite, recherchez et cliquez sur le bouton Soumettre. Instanciez un bot en tant que bot et passez "BTC" comme crypto que vous souhaitez rechercher.
Vous devez vous rendre sur la page principale de Bitcoin. Profitons maintenant de l'opportunité d'obtenir et de copier tous les Xpaths dans chaque élément sur lequel nous voulons collecter des données. Pour l'instant, nous pensons avoir besoin de prix, de plafond, de volume sur 24 heures et de variation sur 24 heures. Créons une variable pour contenir ces valeurs dans notre script. Passez ensuite les variables à l'échelle de la classe à la fonction get_crypto_data. Une fois l'élément en place, utilisez la méthode .text de Selenium pour obtenir le contenu textuel de l'élément. Puis imprimez-le sur le terminal. En fonction de la page Web, le chargement de l'élément DOM peut prendre un certain temps, donc si vous obtenez une erreur telle que l'élément introuvable, vous devrez peut-être attendre un certain temps. Le moyen le plus simple de le faire est d'utiliser time.sleep ().
Faisons ceci et voyons ce qui se passe.
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()
Vous disposez maintenant des données sous forme de variable que vous pouvez transmettre à l'ensemble de la classe Bot. Passons ceci à la fonction write_file. Il tamponne ensuite le système et l'enregistre dans un fichier local sur le cloud d'Alibaba.
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))
Dans le code ci-dessus, le fichier dans lequel la variable cryptographique est concaténée à market.txt est ouvert en tant que nom de fichier à écrire. a "ouvre le fichier en mode annexe, donc n'écrasez pas les données précédentes. Créez ensuite une variable time_stamp pour appeler la date et l'heure sous forme de chaînes. Ensuite, créez les données de marché sous forme de chaînes. Ecrire dans save_file as. La partie où "n" est concaténé est un saut de ligne, donc tout ne tient pas sur une seule ligne.
Bien sûr, vous pouvez gratter n'importe quel chiffrement de cette façon en modifiant les arguments lors de l'initialisation de la classe Bot. Grattons les données du marché Etherium.
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()
Vous disposez maintenant d'un moyen automatisé d'obtenir l'ensemble de données et de le renvoyer sous forme de variable. Vous pouvez l'écrire dans un fichier local. Ces données peuvent être connectées, par exemple, aux services d'apprentissage automatique d'Alibaba pour l'analyse des données ou aux bases de données relationnelles pour le suivi.
Voici le code final.
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