0

J'ai écrit un script en utilisant python avec du sélénium pour gratter les noms des restaurants à partir d'une page Web. Cela marche très bien si je code en dur le nombre de montant que je veux analyser. La page a un processus de chargement paresseux et il affiche 40 noms dans chaque rouleau. Cependant, mon script peut le gérer. La seule chose que je voudrais améliorer dans mon script est que je ne souhaite pas coder en dur le nombre; Au contraire, je veux qu'il détecte lui-même combien sont là et l'analyse avec succès. J'espère qu'il y a quelqu'un pour aider. Voici le code:Comment automatiser l'exploration sans coder en dur un nombre quelconque?

from selenium import webdriver 
import time 

driver = webdriver.Chrome() 

driver.get('https://www.yellowpages.ca/search/si/1/pizza/Toronto') 

while True: 
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") 
    time.sleep(3) 

    links = [posts.text for posts in driver.find_elements_by_xpath("//div[@itemprop='itemListElement']//h3[@itemprop='name']/a")] 

    if (len(links) == 240): 
      break 

for link in links: 
    print(link) 

driver.quit() 

Répondre

1

Vous pouvez vérifier si le nombre de liens a changé dans la dernière itération

num_Of_links = -1 
num = 0 
while num != num_Of_links: 
    num_Of_links = num 
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") 
    time.sleep(3) 

    links = [posts.text for posts in driver.find_elements_by_xpath("//div[@itemprop='itemListElement']//h3[@itemprop='name']/a")] 
    num = len(links) 
+0

Merci Guy, pour votre réponse. J'ai essayé tout à l'heure avec votre code suggéré. Il donne 80 liens seulement. Vous pouvez vérifier si j'ai été en mesure de suivre votre instruction correctement en suivant le lien. "https://www.dropbox.com/s/78gmeij5efwm8gn/Modified%20code.txt?dl=0" – SIM

+0

@ SMth80 Supprimer la pause. La condition 'while' gèrera la sortie de la boucle. – Guy

+0

Je l'ai fait et trouvé 40 liens cette fois. – SIM