Créer un bot de collecte de données en Python à l'aide de Selenium

** 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.

Aperçu

Que dire dans cet article

  1. Instanciation de l'instance Windows Alibaba Cloud

  2. Installation

  1. Ecrire un script Python Selenium pour vérifier le marché de la crypto

--É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/

Script Python

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.

  1. Je souhaite accéder à une page Web par programmation
  2. Je veux récupérer des données
  3. Je souhaite transmettre les données en tant que variable
  4. Je souhaite enregistrer les données dans un fichier sur le cloud

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. 1.png

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

Créer un bot de collecte de données en Python à l'aide de Selenium
Créer un fichier GIF en utilisant Pillow en Python
Créez un fichier MIDI en Python en utilisant pretty_midi
Créer une fonction en Python
Créer un dictionnaire en Python
Créer une interface graphique python à l'aide de tkinter
Créer un conteneur DI avec Python
Créer un fichier binaire en Python
Créer une chaîne aléatoire en Python
Créer un bot LINE avec Django
Générer une collection de première classe en Python
Créer une application GUI simple en Python
[Python] Créer un environnement Batch à l'aide d'AWS-CDK
[Python] [LINE Bot] Créer un robot LINE de retour de perroquet
Obtenez des données Youtube en Python à l'aide de l'API Youtube Data
Scraping de sites Web à l'aide de JavaScript en Python
Développement de slack bot avec python en utilisant chat.postMessage
[GPS] Créer un fichier kml avec Python
Dessinez une structure arborescente en Python 3 à l'aide de graphviz
Créer un enregistrement avec des pièces jointes dans KINTONE à l'aide du module de requêtes Python
[Python] [Word] [python-docx] Essayez de créer un modèle de phrase de mot en Python en utilisant python-docx
Créez un environnement de test Vim + Python en 1 minute
Créer un LINE BOT avec Minette pour Python
Je veux créer une fenêtre avec Python
Créer un graphique de distribution normale standard en Python
Comment créer un fichier JSON en Python
Créer un environnement virtuel avec conda avec Python
Créer un analyseur de données binaires à l'aide de Kaitai Struct
Créer une carte Web en utilisant Python et GDAL
Afficher les avis sur les médicaments à l'aide de listes en Python
Analyse de données en Python: une note sur line_profiler
Étapes pour créer un bot Twitter avec Python
Créer un modèle d'investissement dynamique simple en Python
Créer une nouvelle page en confluence avec Python
Créer un objet datetime à partir d'une chaîne en Python (Python 3.3)
Créer un package contenant des commandes globales en Python
Créer un modèle d'antenne cadre en Python dans KiCad
Environnement enregistré pour l'analyse des données avec Python
[Docker] Créez un environnement jupyterLab (python) en 3 minutes!
Créer un module Python
Créer Spatia Lite en Python
Nettoyage des données à l'aide de Python
Créer un environnement Python
Créer un bot slack
Créer un diagramme de dispersion elliptique en Python sans utiliser une distribution normale multivariée
Créez votre propre Big Data en Python pour validation
Recevez des données de dictionnaire à partir de programmes Python avec AppleScript
Enregistrez collectivement des données dans Firestore à l'aide d'un fichier csv en Python
[CRUD] [Django] Créer un site CRUD en utilisant le framework Python Django ~ 1 ~
[API LINE Messaging] Créez un menu riche avec Python
Une collection de code souvent utilisée dans Python personnel
[Python] Générer ValueObject avec un constructeur complet à l'aide de classes de données
Créer un plugin pour exécuter Python Doctest sur Vim (2)
Obtenez des données LEAD à l'aide de l'API REST de Marketo en Python
Créez un plug-in pour exécuter Python Doctest avec Vim (1)
En Python, créez un décorateur qui accepte dynamiquement les arguments Créer un décorateur
Jusqu'à ce que vous insériez des données dans une feuille de calcul en Python