0

Ich habe ein Skript mit Python mit Selen geschrieben, um Namen von Restaurants von einer Webseite zu kratzen. Es funktioniert gut, wenn ich die Anzahl der Menge, die ich analysieren möchte, fest codiere. Die Seite hat einen Lazy-Loading-Prozess und zeigt in jedem Bild 40 Namen an. Allerdings kann mein Skript damit umgehen. Das einzige, was ich in meinem Skript verbessern möchte, ist, dass ich die Nummer nicht fest codieren möchte; vielmehr möchte ich, dass es selbst erkennt, wie viele es gibt, und es erfolgreich analysieren. Hoffe, es gibt jemanden zu helfen. Hier ist der Code:Wie automatisiere ich das Crawlen, ohne eine Nummer darauf zu codieren?

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() 

Antwort

1

Sie können überprüfen, ob die Anzahl der Links in der letzten Iteration geändert hat

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

Dank Guy, für Ihre Antwort. Ich habe gerade mit deinem vorgeschlagenen Code versucht. Es gibt nur 80 Links. Sie können überprüfen, ob ich Ihren Anweisungen richtig folgen konnte, indem Sie den Link verfolgen. "https://www.dropbox.com/s/78gmeij5efwm8gn/Modified%20code.txt?dl=0" – SIM

+0

@ SMth80 Entfernen Sie die Pause. Die 'while' Bedingung wird den Ausgang der Schleife behandeln. – Guy

+0

Ich habe das getan und diesmal 40 Links gefunden. – SIM

Verwandte Themen