Partage
  • Partager sur Facebook
  • Partager sur Twitter

Web scraping avec python

Sujet résolu
    1 août 2021 à 19:35:41

    Salut les amis,

    Je souhaite apprendre python et pour ça j'ai commencé par un petit projet de web scraping , je veux faire un tableau de veille concurrentiel pour une agence de voyage, Tout d'abord voici le lien de site :  https://tn.tunisiebooking.com

    Comme vous voyez il faut remplir le formulaire puis une liste des hôtels va être affichée j'ai réussi à automatiser la recherche mais je me suis bloquée dans l'étape d'extraction de données je sais pas pourquoi il revient et extraire les données de la page d'accueil. Si vous pouvez m'aider et m'expliquer pourquoi ça passe comme ça et merci d'avance. Voici le code que j'ai utilisé :

    import timer
    from selenium.webdriver.common.action_chains import ActionChains
    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.common.action_chains import ActionChains
    from bs4 import BeautifulSoup
    import requests
    
    
    
    PATH="C:\chromedriver.exe"
    driver = webdriver.Chrome(PATH)
    driver.get('https://tn.tunisiebooking.com/')
    wait = WebDriverWait(driver, 20)
    
    
    # write script
    script = "document.getElementById('ville_des').value ='Sousse';document.getElementById('depart').value ='05/08/2021';document.getElementById('checkin').value ='05/08/2021';document.getElementById('select_ch').value = '1';"
      
        
    # generate a alert via javascript
    driver.execute_script(script)
    
    btn_rechercher = driver.find_element_by_id('boutonr')
    btn_rechercher.click()
    
    print(driver.current_url)
    r = requests.get(driver.current_url)
    
    soup = BeautifulSoup(r.text, 'html.parser')
    
    results = soup.find_all('div', attrs={'class':'bloc_titre'})
    
    
    len(results)
    
    
    records = []
    for result in results:
        nom = result.find('a').text
       
        records.append((nom))
    len(records)
    import pandas as pd
    df = pd.DataFrame(records, columns=['nom'])
    df.head()
    



    • Partager sur Facebook
    • Partager sur Twitter
      1 août 2021 à 21:49:04

      HS : Rassure-moi, c'est vraiment pour apprendre ? Parce que le site n'a pas de mentions légales. Je ne ferais absolument pas confiance à ce site. Il pue l'arnaque.

      Les lignes 38 et 46 ne servent à rien à moins que tu veux print la longueur de results et records

      As-tu une erreur non sémantique quand tu lances ton code ?

      • Partager sur Facebook
      • Partager sur Twitter
        1 août 2021 à 23:40:18

        CristianoRolando a écrit:

        HS : Rassure-moi, c'est vraiment pour apprendre ? Parce que le site n'a pas de mentions légales. Je ne ferais absolument pas confiance à ce site. Il pue l'arnaque.

        Les lignes 38 et 46 ne servent à rien à moins que tu veux print la longueur de results et records

        As-tu une erreur non sémantique quand tu lances ton code ?

        Tout d'abord merci pour votre réponse.

        sinon je te jure que c'est pour apprendre hhh le site c'est d'une agence de voyage c'est pas d'arnaque rassurez-vous.

        j'essaye de récupérer la liste des hôtels dans chaque région c'est tout.

        Ya pas d'erreur juste il m'affiche des hôtels de la page d'accueil et non de la page souhaité.

        • Partager sur Facebook
        • Partager sur Twitter
          1 août 2021 à 23:51:04

          Hiba-fh a écrit:

          le site c'est d'une agence de voyage c'est pas d'arnaque rassurez-vous

          C'est pas le problème, et c'est HS ici comme j'ai précisé. Mais, la Tunisie est un pays touristique, un site d'agence de voyage SANS mentions légales claires, ça pue l'arnaque, point.

          Ok pour le reste, donc, c'est une erreur sémantique. Ça veut dire que ton code exécute ce que tu lui ordonnes de faire, ce que tu ordonnes est parfois différent de ce que l'on souhaite avoir.

          Vérifie que Selenium (je pense) se déplace bien dans la page souhaité et ne reste pas dans la page d'accueil.

          Comme idée en vrac j'ai :

          se déplacer avec Selenium de page Web en page Web ;

          faire un test sans liste, avec juste un hôtel (en profiter pour apprendre ou réviser les tests unitaires)

          • Partager sur Facebook
          • Partager sur Twitter
            3 août 2021 à 17:12:34

            je dirais que lorsque tu récupères l'adresse courante, tu ne récupères pas la page de résultat mais la page d'accueil donc tu récupères les infos de cette page d'accueil

            Il faut "faire une pause" après le click pour que la page de résultat puisse se charger, soit une attente implicite (driver.implicit_wait(5)), soit explicite/fluente avec ton wait (wait.until(...))

            https://www.lambdatest.com/blog/selenium-wait-for-page-to-load/ 

            doc plus officielle https://selenium-python.readthedocs.io/waits.html 

            • Partager sur Facebook
            • Partager sur Twitter

            Web scraping avec python

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            • Editeur
            • Markdown