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

Résolu/Fermé
JPL034 Messages postés 22 Date d'inscription mardi 29 octobre 2013 Statut Membre Dernière intervention 25 septembre 2021 - 23 sept. 2021 à 23:55
JPL034 Messages postés 22 Date d'inscription mardi 29 octobre 2013 Statut Membre Dernière intervention 25 septembre 2021 - 25 sept. 2021 à 18:51
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
A voir également:

4 réponses

yg_be Messages postés 22993 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 20 juillet 2024 1 495
24 sept. 2021 à 10:19
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?
JPL034 Messages postés 22 Date d'inscription mardi 29 octobre 2013 Statut Membre Dernière intervention 25 septembre 2021 35
Modifié le 24 sept. 2021 à 13:22
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()
yg_be Messages postés 22993 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 20 juillet 2024 1 495
24 sept. 2021 à 13:51
Je me demande si tu ne devrais pas utiliser Selenium au lieu de BeautifulSoup.
0
JPL034 Messages postés 22 Date d'inscription mardi 29 octobre 2013 Statut Membre Dernière intervention 25 septembre 2021 35
24 sept. 2021 à 13:58
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.
JPL034 Messages postés 22 Date d'inscription mardi 29 octobre 2013 Statut Membre Dernière intervention 25 septembre 2021 35
25 sept. 2021 à 18:51
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.