PB de scraping d’une liste déroulante non renseignée.

Résolu
JPL034 Messages postés 25 Statut Membre -  
JPL034 Messages postés 25 Statut Membre -
Bonjour à toutes et tous.
Je suis débutant en python, mais j’ai de bonnes bases en html, sql et js (enfin là un peu). Je ne connais pas du tout jquery.
Je cherche à faire une liste, en python, sur le « grand site très connu » de e-commerce. Si je veux par exemple un t-shirt, sur certains modèles, il faut sélectionner la taille, dans une liste déroulante (<select><option>) pour avoir le prix exact ainsi que le délai de livraison (en haut à droite).
Si j’ouvre la console de développement (F12 ou CRT+MAJ+i) sur firefox, je trouve la liste des tailles dans un « <select><option> ».

<select name= »….>
<option value="-1" id="...selected="">Sélectionner</option>
<option value="0...content="XS">XS</option>

</select>

Dans la DIV (« a-box-inner ») « prix » et « livraison » ne sont pas renseignés. J’ai cru comprendre que c’est une javascript qui va chercher les infos quand on a choisi la taille.
Comment puis-je envoyer à ma requête python, la valeur de la taille que je souhaite dans cette liste déroulante ?
Je pars du principe que tous les t-shirt ont la même valeur de SELECT (je me débrouillerais en décortiquant le code).
Merci de vos réponses et de me mettre sur la piste, car j'avoue ne pas trouver grand chose.
Bonne journée à toutes et tous.

Configuration: Windows 10 pro / Firefox 92.0 / Pÿthon 3.8 64 bits

4 réponses

  1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    bonjour,
    je ne comprends pas ce qu'est "ta requête python", ni qui va lui envoyer quoi?
    peut-être que tu pourrais être plus concret en nous montrant ton programme.

    Veux-tu que ton programme python sélectionne une des valeurs de la liste?
    0
  2. JPL034 Messages postés 25 Statut Membre 35
     
    Bonjour et merci de ta réponse.
    Désolé d'avoir été brouillon dans ma demande.

    Alors : Oui, je veux que mon programme python sélectionne une valeur de la liste.
    En français, ça ferait : Sur le t-shirt "machin", dans la liste de sélection "taille", mets la valeur "M".

    Je mets un print écran pour être plus clair.


    Je mets le programme que j'ai fait, mais ça ne va pas aider beaucoup puisque je ne fais qu'afficher, pour l'instant, le titre et la fourchette de prix.

    import requests
    from bs4 import BeautifulSoup

    headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:71.0) Gecko/20100101 Firefox/92.0"}

    URL = "https://www.amazon.fr/dp/B00BN5NHII"

    def lit():
    page = requests.get(URL, headers=headers)
    soup = BeautifulSoup(page.content, "html.parser")
    # titre du produit
    title = soup.find(id="productTitle").get_text().strip()
    # Prix mis en forme
    price = soup.find(id="priceblock_ourprice").get_text()
    print(title)
    print(price)

    if __name__ == "__main__":
    lit()
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      Je me demande si tu ne devrais pas utiliser Selenium au lieu de BeautifulSoup.
      0
  3. JPL034 Messages postés 25 Statut Membre 35
     
    Merci pour ta réponse rapide.
    Je vais regarder de ce coté là. ça ne coute rien d'essayer :)
    Je posterai ma réponse ici.
    Merci encore.
    0
  4. JPL034 Messages postés 25 Statut Membre 35
     
    YESSSS !!!!
    Je ne suis pas loin. Merci de m'avoir aiguillé vers selenium.
    J'ai un peu (pas mal) galéré, mais je touche au but.

    Pour ceux que ça intéresse, voici comment j'ai fait :
    D'abord, installer selenium si ce n'est pas déjà fait : pip install selenium
    Ensuite télécharger geckodriver-xxxxxx.zip (la version qui vous intéresse). Extraire l'exécutable et (moi, j'ai fait ça) le coller dans le dossier python (au niveau de python.exe)

    Pour finir, voilà mon script. Bon, il y a encore du boulot : accepter les cookies, chercher la liste, sélectionner.... mais déjà j'arrive à écrire quelque chose dans la zone de recherche. Il ne me reste plus qu'à fouiller la doc de selenium.

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.common.keys import Keys
    driver = webdriver.Firefox()

    # Navigate to url
    driver.get("https://www.amazon.fr/dp/B00BN5NHII")
    driver.implicitly_wait(30)

    # Enter "webdriver" text and perform "ENTER" keyboard action
    driver.find_element(By.NAME, "field-keywords").send_keys("t-shit" + Keys.ENTER)


    Problème résolu.
    Merci.
    0