IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Réseau/Web Python Discussion :

Problème Scraping Python Site utilisant des scripts


Sujet :

Réseau/Web Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2021
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2021
    Messages : 2
    Par défaut Problème Scraping Python Site utilisant des scripts
    Bonjour,

    Ce que je souhaite faire est à la fois me former au scraping en python et aussi me permettre de gagner du temps sur le jeu Dofus.
    Mon but est de parser une liste d'équipement sur le Serveur Merkator afin de savoir les équipements les plus rentable à briser...
    Le site que je souhaite scraper est : https://profus.net/broker

    La plupart des tutoriels ou information que je trouve pour faire du scraping sur des sites internet marche avec des sites dans lesquels les informations sont déjà dans le code HTML. Cependant avec ce site, ce sont des scripts qui viennent modifier les informations contenues dans un dropdown-menu. Ce menu donne une liste d'équipement à partir du moment ou l'utilisateur commence à écrire quelque chose (autocomplétion).

    Je n'ai aucune idée de comment récupérer les informations sur un site n'ayant pas une page par item mais une page pour tout.

    PS: j'ai pensé à récupérer manuellement la liste des équipements pour venir les rentrer dans le site automatiquement afin de scraper pour chaque item le prix de brisage. Cependant, j'aurai bien voulu tout automatiser.

    N'hésitez pas à me poser des questions. J'ai juste donné le but global

    Information complémentaire:
    Code HTML en inspectant l'HTML:

    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <a role="button" tabindex="0" class="dropdown-item">
    	<div class="media">
    		<figure class="media-left">
    		<img src="/static/dofus2/dofusData/item/bitmap/17/17292.png" class="image is-32x32">
    		</figure> 
    		<div class="media-content">	Cape des Justiciers	<small>	Niv. 200 </small> </div>
    	</div>
    </a>

    Code réel du site:
    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    	[<div class="media">
    		<figure class="media-left">
    		<img :src="`/static/dofus2/dofusData/item/bitmap/${Math.floor(props.option.iconId/1000)}/${props.option.iconId}.png`" class="image is-32x32"/>
    		</figure>
    		<div class="media-content">	[[ props.option.label ]] <small> Lvl. [[ props.option.level ]] </small>	</div>
    		</div>, <div class="media">
    		<div class="media-left">
    		<img :src="`/static/characteristics/${stat.char_id}.svg`" class="image is-24x24"/>      
    		</div>
    		<div class="media-content is-size-6">
    										[[ stat.char_name ]]
    									</div>
    		</div>]

    Nom : image_2021-10-02_143744.png
Affichages : 227
Taille : 465,7 Ko

  2. #2
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 246
    Par défaut
    hello,
    voici un script qui descend jusqu'à la page que tu montres en dernier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    import time
    #import pandas as pd
    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    from selenium.webdriver.support.select import Select
    from selenium.webdriver.common.action_chains import ActionChains
    options = Options()
    #options.add_argument("--user-data-dir=D:\\Temp\\chrome")
    driver = webdriver.Chrome('chromedriver.exe',options=options)
    driver.implicitly_wait(8)
    url = "https://profus.net/broker"
    driver.get(url)
    select_element = driver.find_element_by_tag_name('select')
    select_object = Select(select_element)
    select_object.select_by_visible_text("Merkator")
    searchtext = driver.find_element_by_tag_name('input')
    searchtext.send_keys('a')
    items = driver.find_elements_by_class_name('dropdown-item')
    for item in items:
        print(item.text)
    items[0].click()
    time.sleep(2)
    objet = driver.find_element_by_tag_name('h2')
    taux = driver.find_element_by_xpath('//div[@class="column"]//input')
    #taux.screenshot('d:/temp/taux.png')
    print(objet.text,' : ',taux.get_attribute('outerHTML'))
    latable= driver.find_element_by_tag_name('table')
    #pd.set_option("max_columns", 8)
    #df = pd.read_html(latable.get_attribute('outerHTML'))
    #print(df)
    print("==========================================")
    driver.quit()
    le principe :
    On sélectionne la seule boîte de sélection présente dans la première page.
    On sélectionne dedans Merkator.
    On lance une recherche sur 'Marteau'
    On récupère alors les éléments qui se trouvent dans la liste de la "dropdown"
    On click sur le premier élément de cette liste.
    On arrive alors sur la page correspondante et on attend 2 secondes.
    On récupère le nom de l'objet avec la balise h2.
    On essaie de récupérer ce qui s'affiche dans le champ Taux (je n'y arrive pas voir ci-après).
    En commentaire l'utilisation de pandas pour récupérer le contenu de la table affichée.

    Les problèmes qui se posent :
    1 - On est obligé de lancer une recherche arbitraire et il n'y a qu'un certain nombre d'éléments dans la liste résultante (une vingtaine).
    2 - Je n'arrive pas à récupérer ce qui est affiché dans le champ taux directement. Dans le html de la page cette valeur n'apparaît pas. Le seul moyen que j'ai trouvé c'est de faire un screenshot de ce champ. Dans l'image résultante, on voit bien le taux. Si quelqu'un une idée du pourquoi.

    Ami calmant, J.P

  3. #3
    Nouveau candidat au Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2021
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2021
    Messages : 2
    Par défaut
    Salut jurassic pork,

    Merci pour ta réponse rapide, j'ai réussi à lancer ton script, c'est déjà un très bon point de départ, j'ai scrapper sur le site de dofus les équipements du métier "forgeron", voici le fichier csv que j'ai pu récupérer, cependant même en faisant une recherche avec le nom exacte il arrive souvent que l'équipement demandé ne soit pas dans la liste, ce qui est embêtant.
    Voici la liste dans un fichier .csv
    dofus_forgeron_item.rar

    Je peux donc parcourir cette liste en faisant une boucle sur le fichier csv et code que tu as fourni, je vais essayer de récupérer les taux, mais vu qu'ils ne sont pas directement dans le code html c'est compliqué...

  4. #4
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 246
    Par défaut
    Citation Envoyé par Toto97128 Voir le message
    cependant même en faisant une recherche avec le nom exacte il arrive souvent que l'équipement demandé ne soit pas dans la liste, ce qui est embêtant.
    je crois bien que leur moteur de recherche est "pourri" : il ne recherche que sur un mot ce qui peut s'avérer trop juste.
    Par contre pour récupérer la valeur du taux j'ai trouvé une solution en utilisant le presse-papier. On sélectionne le contenu du champ qui contient le taux. On le copie dans le presse-papier et on récupère la valeur du presse-papier. Pour faire ceci il faut installer le module clipboard. Voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    from selenium.webdriver.common.keys import Keys
    import clipboard
    objet = driver.find_element_by_tag_name('h2')
    taux = driver.find_element_by_xpath('//div[@class="column"]//input')
    taux.send_keys(Keys.CONTROL, 'a') # highlight all in box
    taux.send_keys(Keys.CONTROL, 'c') # copy
    valtaux = clipboard.paste()
    print(objet.text,' : ',valtaux)
    Ami calmant, J.P

Discussions similaires

  1. Utiliser des scripts Python dans Wordpress
    Par hamzaHDR dans le forum Interfaçage autre langage
    Réponses: 4
    Dernier message: 12/03/2018, 10h30
  2. comment utiliser des scripts Perl dans des pages Html?
    Par mahmoudelect dans le forum Langages de programmation
    Réponses: 5
    Dernier message: 16/03/2010, 14h11
  3. Utiliser des scripts PHP
    Par PerpetualSnow dans le forum Silverlight
    Réponses: 18
    Dernier message: 04/02/2009, 11h30
  4. utilisation des scripts d'autocomplétion
    Par gendalf37400 dans le forum Ruby on Rails
    Réponses: 5
    Dernier message: 14/06/2007, 14h48
  5. [JMeter] Utiliser des scripts BeanShell
    Par otsgd dans le forum Tests et Performance
    Réponses: 1
    Dernier message: 08/08/2006, 09h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo