CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[WEB] Récupérer une infos sur un site avec python

Pseudo supprimé
Pseudo supprimé 25 septembre 2021 à 18:23:00

Salut à tous,
J'aurai besoin de récupérer une info sur un site bien précis : https://bscscan.com/token/0x97e5d50fe0632a95b9cf1853e744e02f7d816677?a=0xa7d89ad286aea36332377a30e9ec2e1771f6bfca#readContract

Voici l'information : https://image.noelshack.com/fichiers/2021/38/6/1632586918-ici.png

Le problème étant que cette info est généré par un script, sans doute du javascript
Donc quand je prends la page avec le code source, bah j'ai pas mon info :(

Comment faire pour récupérer aussi les données générées par un script js ?

Merci

kabatso
kabatso
Niveau 10
25 septembre 2021 à 18:47:00

Vois ce que ça donne en utilisant un framework comme Scrapy

Pseudo supprimé
Pseudo supprimé 25 septembre 2021 à 18:50:00

Salut, merci pour ta réponse

En faite j'ai un peu avancer :
https://image.noelshack.com/fichiers/2021/38/6/1632588540-ici.png

Mais j'ai le problème suivant :
https://image.noelshack.com/fichiers/2021/38/6/1632588579-ici.png

Le serveur comprends la requête mais ne veut pas l'executer, pourquoi :( ?

Pseudo supprimé
Pseudo supprimé 25 septembre 2021 à 18:59:40

Ok j'ai réussi à récupérer la page web mais je peux pas récupérer l'info vu qu'elle est générée dans un script js :(

Azerban
Azerban
Niveau 16
25 septembre 2021 à 19:16:06

Pour récupérer une info générée par du javascript 2 solutions :
- trouver un interroger l'API que le javascript interroge et récupérer les données "à la source" (tu peux aussi regarder ailleurs dans le HTML, parfois les données sont présentes en JSON dans une balise type application/json).
- utiliser un webbrowser headless qui va charger complètement la page (et donc le JS) et ensuite aller chercher les données dans le DOM.

Voici comment faire en utilisant la deuxième solution en Python avec selenium :

# https://www.jeuxvideo.com/forums/42-47-67758389-1-0-1-0-web-recuperer-une-infos-sur-un-site-avec-python.htm
# crypto_selenium.py

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

def get_price_per_full_share(headless=True):
    chrome_options = Options()
    if headless:
        chrome_options.add_argument("--headless")

    driver = webdriver.Chrome(options=chrome_options)
    driver.maximize_window()
    driver.implicitly_wait(10)
    driver.get("https://bscscan.com/token/0x97e5d50fe0632a95b9cf1853e744e02f7d816677?a=0xa7d89ad286aea36332377a30e9ec2e1771f6bfca#readContract")
    frame = driver.find_element_by_id("readcontractiframe")
    driver.switch_to.frame(frame)
    section = driver.find_element_by_id("readCollapse7")
    price = section.find_element_by_css_selector("div.card-body div.form-group a").text
    return price


if __name__ == "__main__":
    price = get_price_per_full_share()
    print(f"Price per full share: {price}")

Retourne :

Price per full share: 1216060896747141120
Azerban
Azerban
Niveau 16
25 septembre 2021 à 19:17:28

Il faut installer le webdriver de chrome : https://chromedriver.chromium.org/getting-started

Azerban
Azerban
Niveau 16
25 septembre 2021 à 19:43:17

Bon au final j'ai examiné plus attentivement la requête, pas besoin d'utiliser Selenium, les données sont présentes dans du HTML à une autre adresse :

https://bscscan.com/readContract?m=normal&a=0x97e5d50fe0632a95b9cf1853e744e02f7d816677&v=

Ensuite tu récupères les données avec le module requests (plus personne n'utilise urllib directement) et tu parses le HTML avec BeautifulSoup et le tour est joué :

import requests
from bs4 import BeautifulSoup


def get_price_per_full_share(url: str):
    headers = {
        "User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:92.0) Gecko/20100101 Firefox/92.0"
    }

    response = requests.get(url, headers=headers)
    soup = BeautifulSoup(response.text, "html.parser")
    return soup.select_one("div#readCollapse7 div.card-body form div.form-group a").text

if __name__ == "__main__":

    url = "https://bscscan.com/readContract?m=normal&a=0x97e5d50fe0632a95b9cf1853e744e02f7d816677&v="
    price = get_price_per_full_share(url)
    print(f"Price Per Full Share: {price}")

Retourne :

Price Per Full Share: 1216105068615599192

Cette méthode est beaucoup plus rapide. Pense aussi à passer un user-agent valide (c'est pour ça que tu avais une réponse 403).

Sous forums
  • Aide à l'achat Mac
  • Macintosh
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Steam Deck
  • Hardware
La vidéo du moment