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 :

éléments google maps me retourne des chaines vide [Python 3.X]


Sujet :

Réseau/Web Python

  1. #1
    Membre régulier Avatar de animalx123
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2015
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2015
    Messages : 148
    Points : 96
    Points
    96
    Par défaut éléments google maps me retourne des chaines vide
    Bonjour ,
    j'essaie de scraper une liste de restaurants sur google maps, et je rencontre un problème car je ne sais pas si c'est moi qui s'est mal pris ou c'est une sécurité de google,
    par exemple je veux récupérer le titre du restaurant, comme ce ci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.wait import WebDriverWait
    from selenium.webdriver.chrome.options import Options
     
    driver = webdriver.Chrome('chromedriver.exe')
    url = "https://www.google.com/maps/place/Le+Bois+Des+Arcades/@36.7424336,3.0646847,15z/data=!4m9!1m2!2m1!1sRestaurants!3m5!1s0x128fb29e1d83cad3:0x35d569bbb6d4f71c!8m2!3d36.742445!4d3.0734871!15sCgtSZXN0YXVyYW50c1oNIgtyZXN0YXVyYW50c5IBCnJlc3RhdXJhbnQ"
    driver.get(url) 
    y = driver.find_elements_by_css_selector('#pane > div > div.widget-pane-content.cYB2Ge-oHo7ed > div > div > div.x3AX1-LfntMc-header-title > div.x3AX1-LfntMc-header-title-ma6Yeb-haAclf > div.x3AX1-LfntMc-header-title-ij8cu > div:nth-child(1) > h1')
     
    print(y)
    et ca me retourne une chaine vide, et c'est pareille pour le reste des éléments que je veux récupérer ,
    j'ai beau chercher sur le net et les forums mais j'ai pas trouver des explications sur ce sujet ,
    merci de m'éclaircir .

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

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 947
    Points : 9 275
    Points
    9 275
    Par défaut
    hello,
    il faudrait savoir exactement ce que tu veux faire et à partir de quoi pour que l'on puisse essayer de t'aider ( ex : A partir d'une carte google maps affichée avec des points d'intérêts, je veux récupérer les informations des points d'intérêt).
    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  3. #3
    Membre régulier Avatar de animalx123
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2015
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2015
    Messages : 148
    Points : 96
    Points
    96
    Par défaut
    je veux récupérer le titre et et l'adresse et le numéro de téléphone des restaurant a partir de l'onglé a gauche de la map quand on clique sur un restaurant situé dans une ville, il suffit juste de trouver la classe ou le xpath ou le sélecteur css avec selenium comme l'exemple du premier message et récupérer les résultat, mais comme je l'ai dit dans le premier message ca ne retourne rien quand j'essaie de récupérer les informations des div,

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

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 947
    Points : 9 275
    Points
    9 275
    Par défaut
    hello,
    voilà ce que je te propose : un script qui va :
    1 - Afficher une carte avec une recherche de restaurants
    2 - Récupérer tous les liens des restaurants trouvés
    3 - Afficher les liens des restaurants en récupérant le nom, l'adresse et le numéro de téléphone
    4 - Passer aux pages suivantes de résultats le cas échéant (il y a 20 restaurants dans une page )
    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
    33
    34
    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    options = Options()
    options.add_argument("--user-data-dir=D:\\Temp\\chrome")
    driver = webdriver.Chrome('chromedriver.exe',options=options)
    url = "https://www.google.com/maps/search/Restaurants/@36.7424323,3.0646847,15z/data=!3m1!4b1"
    driver.get(url)
    monScript = """ var scroller =document.querySelector('div[aria-label*="Résultats"]');
                    scroller.scrollTop=scroller.scrollHeight; """
    for numpage in range(2):
        driver.get(url)
        pageSuivante = driver.find_element_by_xpath('//button[@aria-label="Page suivante"]')
        for i in range(numpage):
            pageSuivante.click()
        for i in range(10):  #on fait défiler les résultats pour les avoir tous
            driver.execute_script(monScript)
        # on récupère les liens des infos de restos
        restos = driver.find_elements_by_xpath('//div[contains(@aria-label,"Résultats")]/div/div/a')
        lienRestos=[]
        for resto in restos:
            lienRestos.append(resto.get_attribute('href'))
        for lienResto in lienRestos:
            driver.get(lienResto)
            resto  = driver.find_element_by_tag_name('h1')
            print(resto.text)
            infos = driver.find_elements_by_xpath('//button')
            for info in infos:
                label = info.get_attribute('aria-label')
                if label != None and 'Adresse' in label:
                    print(label)
                if label != None and 'Numéro de téléphone' in label:
                    print(label)
            print("==========================================")
    driver.quit()
    Quelques explications concernant le script :
    L'option --user-data-dir permet de définir le répertoire où sera stocké un profil. Cela permet de conserver le cache, les cookies, les historiques etc... à chaque relance de selenium.
    Pour changer le nombre de pages à exploiter changer la ligne for numpage in range(2) avec 1 on affiche que la première page de résultats.
    Pour pouvoir avoir tous les résultats d'une page on est obligé de scroller la "scroll-box" on est obligé de le faire plusieurs fois j'ai mis 10 comme valeur ce qui devrait suffire à avoir tous les résultats.
    et voici par exemple une partie de ce que 'on obtient avec ce script :
    ==========================================
    restaurant les sources
    Adresse: Bir Mourad Raïs 16005, Algérie
    Adresse: بير مراد رايس 16005
    Numéro de téléphone: +213 541 00 00 21
    ==========================================
    Le Bois Des Arcades
    Adresse: P3RF+X9G, El Madania, Algérie
    Adresse: P3RF+X9G، المدنية
    Numéro de téléphone: +213 21 66 29 80
    ==========================================
    Restaurant LA CALE
    Adresse: Rte Hassene IBNOU NOUAMANE, Bir Mourad Raïs, Algérie
    Numéro de téléphone: +213 552 18 87 22
    ==========================================
    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  5. #5
    Membre régulier Avatar de animalx123
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2015
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2015
    Messages : 148
    Points : 96
    Points
    96
    Par défaut
    je te remercie jurassic pork ,je viens lire attentivement ton scripte et j'ai compris pourquoi ca ne marchait pas pour moi ,et je viens d'apprendre de nouvelle techniques sur le scrapping, encor merci au fond du cœur .

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. SQL Server retourne des champs vides
    Par Ferllings dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 08/02/2011, 14h16
  2. [PDO] Query retourne des champs vides
    Par ToonToon1 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 06/01/2011, 16h25
  3. Réponses: 4
    Dernier message: 16/10/2008, 10h45
  4. Réponses: 2
    Dernier message: 05/11/2007, 11h41
  5. Serialisation/deserialisation d'un arrayList retourne des objets vides
    Par cdtkoenig dans le forum Collection et Stream
    Réponses: 10
    Dernier message: 18/07/2007, 15h45

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