Partage
  • Partager sur Facebook
  • Partager sur Twitter

Python scraping avec Selenium

Sujet résolu
    18 octobre 2022 à 13:33:07

    Bonjour, je débute seulement sur Python et le web scraping. Et j'ai un petit probème où j'arrive clairement pas à trouver la solution (si elle existe).

    Voilà j'essaye de récupérer des données de matchs de tennis sur le site de l'ATP tour. 

    driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()))
    
    url = "https://www.atptour.com/en/scores/stats-centre/archive/2022/8998/MS002"
    driver.get(url)
    
    tree = html.fromstring(driver.page_source)
    
    left_ratings_xpath = "//div[contains(@class, 'player1 non-speed')]/span/text()"
    results = tree.xpath(left_ratings_xpath)
    
    print(results)

    Voilà le code, c'est juste un exemple, car en effet je récupère tous les matchs de toute l'année sur chaque tournoi. Mais avec l'exemple d'un match ça suffit pour tester. Donc mon problème ici c'est que quand je lance mon code, results me retourne un tableau vide ou un tableau avec toutes les données que je veux. C'est selon son bon vouloir.

    Au début j'utilisais le simple requests pour aller sur l'URL et j'ai toujours un tableau vide, puis en recherchant sur le net, j'ai vu que la page affichait les données dynamiquement avec du JS, donc j'ai utilisé Selenium. Mais voilà le résultat n'est pas entièrement satisfaisant vu que parfois j'ai un tableau vide. Le problèmes c'est que quand je lance mon programme pour récuperer toutes les stats de chaque match de l'année donc le but serait de trouver la solution pour que ça marche tout le temps et non random.

    Du coup je suis allé inspecter la page, dans l'onglets réseau, Fetch/XHR, quand on va sur le fichier MS001 et on a cette réponse :

    {"lastModified":1666092485031,"response":"gbrbur8Mjv93n4f4bTFlNnTuXCbIcSl+E9RjM3Q3NJFWq8JdbxWuvIjTmtGv8TAxHAdnoAy2Mwcuk7UWVojf22UQ8iwtCHHC/8vNfo89N5BTKRTa1IYN0XDoVFEAuObXlHHHV6sNxAgsxdn6wRw3CXX4iLHiw3ZNK3CzA7JYTwKdlMeKsVN/RcEvmnssrmlm3+QTcU4RC4TttT4jihtL4wf4wxRwYsAFLThuSEBce+7hhbHMRPc21eT6DfNuF61Qyj82qR8dyX/5JKTY7uc+tk655J+79MaAIs++rBTvUuv4bVBxz7GT0YJLCEziZaGfbPKCgPj1SQEJ1l6xRHy79aYPKGGUtU78V70fwy8k0ePI6jVJ1dEqha3pgGr4m+gvDLsf9zaQwefdqdyK5iTeA64sdTsxGjcTLwT8qb9Wf6YETMc37H8JkIT02uzQLT9KuZ1eGafZQZpc498XuJEMKchp3xFIAHChXFhCEWfP5zZzfxajuaRltCgxmCjY1sY/nX6Ycpb3xHeqj3hq2CEosT1UrZoa4oWPBqFOPHf1N/9tkLTEqsnYVZddeIF04iQhTKetGgBfnJOIDMsE6pR6wJ7G9M3MjYLBPp2vRvDGowbucmISy0JtPySR3RsEHrUtViZrZLB2fWpxIEhqzBYd3GN/s9MD6Ba/9H5NweWyNmh+d80QqnQq4J0zy3ulGg9zub4C74r3P4E2Sz+23QFdt3Bh71kfKEzg1houAysqPzlMLx9Kd8CLRHDo37XWeVaIluyP5xcFcAOt35LmMjQCiVi0n1Uh9oOo9JIpx65rG0rnxqGSCcfUIiS99PxtJOa7UNG6k6W6IeY2mTsqEltfxh8cKEFpqDa/BrzIScPcy6p2ypy1fSOWMYm1tsJbGEH21jg4N12jr215eB/lLd/Xiw4qfOy29CISek88ky30AzpqtfQyGZDCwOT1snyE+A2uFfqDomg2VdjiWhkkOJx2xPVm/PwMp/eavCWtCnYLSKrgftk4ABrlhYPLfDRh2Jn5V5qolSh+GkC1a607wLV3CSlR4B0qe+PkNcuRl54V1fUx1Q25H9usgHRLEl9k8Zpqet/Qw2xSNZHVZKYCZBMR8MYoqiuRiLNH9gL5L5IHC7duxcaCnNq+WCbmHKXK0EOJMtlX3qVoQQ18gRT0gaKiD6I+9bvayMR+xLWVMQHxozl0G+2sBA+lFZDj+AF0//Kcc0p4j+AsN0eo0pLnxiQIrN9e7rSKnxIm/+8wg6iQ6RRCdVAC6nsD4wkXQ1d2eZorbCH6ltHi1TKQZPR8YY6dUXniWvKka49YGQ8PDQWhl/qe1GZTeah0ZslySZLyVvVCiC8MKbWZV/xQVM9LX++ukg=="}

    Donc ce sont les données, mais je sais pas en quoi elles sont encodées, et du coup je vois pas comment avoir un programme fiable qui marche tout le temps pour récupérer les données que je souhaite.

    Merci pour votre temps, et bonne journée

    -
    Edité par florianpitelfp 18 octobre 2022 à 13:34:34

    • Partager sur Facebook
    • Partager sur Twitter
      18 octobre 2022 à 15:04:15

      peut-être ajouter un temps de pause pour que la page soit chargée complètement quand tu vas lire tes données ? (voir la doc de sélenium https://selenium-python.readthedocs.io/waits.html )
      • Partager sur Facebook
      • Partager sur Twitter
        18 octobre 2022 à 19:05:35

        umfred a écrit:

        peut-être ajouter un temps de pause pour que la page soit chargée complètement quand tu vas lire tes données ? (voir la doc de sélenium https://selenium-python.readthedocs.io/waits.html )


        Merci beaucoup, j'avais essayé quelque chose du genre au début, mais comme j'avais encore beaucoup de données manquantes j'étais pas vraiment sur. Au final j'ai creusé la chose avec tes indications. C'est bien mieux. Tout n'est pas parfait mais c'est à moi d'améliorer tout ça.

        Merci.

        • Partager sur Facebook
        • Partager sur Twitter

        Python scraping avec Selenium

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown