2017-03-05 5 views
0

Hallo alle zusammen noch einmal, Python noob hier. Ich mache langsam Fortschritte mit meinem Projekt, aber die Behebung eines Fehlers führte zu einem weiteren Problem. Lange Rede kurzer Sinn: Ich habeÜberprüfen, ob der schöne supp.find_all Wert leer ist

for tempNext in soup3.find_all(title=re.compile("^Next Page -")):

..loop, die ich a href Wert läßt finden. Es funktioniert super, wenn der Wert existiert. Wenn nicht, wird das selbe aus der vorherigen Zeit wiederverwendet. Leider ist es nicht so einfach, den Wert jedes Mal auf "" zurückzusetzen, da sich diese for-Schleife auch in einer anderen Schleife befindet.

nur die Idee zu bekommen, ist dies, wie das Snippet aussieht:

soup3 = make_soup('http://www.automotiveforums.com/vbulletin/' + link) 
     while tempNumber < 4: 
      for postScrape in soup3.find_all(id=re.compile("^td_post_")): 
       post = "" 
       post += postScrape.get_text(strip=True) 
       postData += post + "\n" 
       print(post) 
      for tempNext in soup3.find_all(title=re.compile("^Next Page -")): 
       tempNextPage = "" 
       tempNextPage += (tempNext.get('href')) 
       print(tempNextPage) 
      soup3 = "" 
      soup3 = make_soup('http://www.automotiveforums.com/vbulletin/' + tempNextPage) 
      tempNumber += 1 
     tempNumber = 1 
    number += 1 
    print(number) 
    newUrl = "http://www.automotiveforums.com/vbulletin/" + nextPage 
    soup = make_soup(newUrl) 

Also habe ich mich gefragt, ob es einen Weg for tempNext in soup3.find_all(title=re.compile("^Next Page -")): Wert zu prüfen war, ob er leer ist, und wenn es ist, stellen nur tempNextPage = "" jedoch In den letzten paar Stunden kann ich es nicht herausfinden.

Wenn ich es nur auf den leeren Wert nach der Schleife eingestellt habe, kratzt es nicht mehr andere Seiten.

Vielen Dank, dass Sie sich die Zeit genommen haben, diese Frage zu lesen, wir würden uns über jede Rückmeldung freuen.

Antwort

1

Deklarieren -oder Reset- tempNextPage Variable außerhalb for Schleife, und weisen Sie die Variable auf neuen Wert - statt hinzufügen neuer Wert zu ihm - innerhalb der for Schleife. Auf diese Weise wird der Wert von tempNextPage würde bleiben leer, wenn soup3.find_all() kein passendes Element gefunden, und Sie können Maßnahmen ergreifen, basierend darauf, ob tempNextPage leer ist:

while tempNumber < 4: 
    tempNextPage = "" 
    for postScrape in soup3.find_all(id=re.compile("^td_post_")): 
     .... 
    for tempNext in soup3.find_all(title=re.compile("^Next Page -")): 
     tempNextPage = tempNext.get('href') 
     print(tempNextPage) 

    # process tempNextPage only if it is not empty 
    if not tempNextPage: 
     soup3 = make_soup('http://www.automotiveforums.com/vbulletin/' + tempNextPage) 
     .... 
    # do something else otherwise 
    else : 
     .... 
+0

Nice one, vielen Dank für das Schauen durch meine Cluster. Es war eigentlich genug, um es nur außerhalb der FOR-Schleife zurückzusetzen, doch wenn ich die Prüfung hinzufügen würde (falls nicht), würde ich Fehlermeldungen für soup3.find_all erhalten. Aber ohne sie funktioniert es gut, würde immer noch gerne einen Weg finden, es nicht in einer massiven geschachtelten Schleife zu haben, aber wird jetzt absolut funktionieren. Vielen Dank! – Norbis