2017-03-26 1 views
2

Ich mache einige einfache Web-Schaben und brauchen einen besseren Weg, um eine Schleife durch die Paginierung auf der Zielstelle zu finden. Der einzige Weg, dies zu tun, war, 10 + "for-Schleifen" zu schreiben, um es zum Laufen zu bringen. Grundsätzlich suche ich nach einem „Next“ in der URL, wenn es vorhanden ist, muss ich die Mutterverbindung des Symbolbild packen und sie an die URL anhängen, auf die neue aktualisierte URL zu gehen, und die Suche nach dem gleichen Icon und wiederhole, bis ich auf die letzte Seite komme (das Icon wird weg sein). Wie könnte ich dies ohne hart codieren ein paar for loops?Python Paginierung Schleife

 url = "http://www.somewebsite.com/" 
     r = requests.get(wurl) 
     soup = BeautifulSoup(r.text, "lxml") 

     for img in soup.findAll("img"): 
      if "/Next_Icon" in img["src"]: 
       link = img.find_parent("a", href=True) 
       extLink = (link["href"]) 
       url = "http://www.somewebsite.com/" + extLink 
+0

Verwendung zu speichern oder einen Stapel/Warteschlange gibt es viele Beispiele für beide auf SO. – AChampion

Antwort

1
url_stack = ["http://www.somewebsite.com/"] 

while url_stack: 
    wurl = url_stack.pop() 
    r = requests.get(wurl) 
    soup = BeautifulSoup(r.text, "lxml") 

    for img in soup.findAll("img"): 
     if "/Next_Icon" in img["src"]: 
      link = img.find_parent("a", href=True) 
      extLink = (link["href"]) 
      url = "http://www.somewebsite.com/" + extLink 
      url_stack.append(url) 

Sie Liste verwenden, sollten alle URLs Rekursion

+1

Ha-Ha, das ist lustig. Du schreibst "wurl" wie ich. Ja, eigentlich werde ich JSON verwenden, um alles darin zu speichern. Aber ich musste nur über diesen Buckel hinwegkommen, also habe ich es gedruckt. Vielen Dank, das sieht wirklich gut aus! Es wird klappen. – M4cJunk13