2016-10-22 5 views
0

Ich habe einen Code, der eine while-Schleife verwendet, um zu drucken, was in den <a href> und </a> Tags einer Webseite enthalten ist. Ich kann die benötigten Indizes und alles, was dazwischen steht, extrahieren und auch ausdrucken. Das Programm soll die URL nur einmal drucken, und dann weitergehen und den Index erhöhen, bis der nächste Indexwert für <a href> und </a> gefunden wird, was auch immer zwischen ihnen gedruckt wird, und dies bis zum Ende der Zeichenkette tun Jede neue URL wurde in einer separaten Zeile gefunden. Hier ist der Code:Python-Programm Druckergebnis mehrere Male

text = """ohsfhskfheifhsefis <a href = "fdnsfjsnfsnfns snkfsndfskj"</a> 
<a href = "snfksnfsdf"</a>""" 

index = 0 

a = 0 

b = 0 

while index < len(text): 

    a = text.find('href', index) 

    b = text.find('/a', index) 

    print(text[a:b]) 

    index = index + 2 

    if index >= len(text): 

     print("End") 

     break 

Allerdings, wenn ich das Programm ausführen, funktioniert es wie in den Bildern gezeigt.

Offensichtlich ist die Logik, die ich verwende, hier falsch. Ich weiß, dass es noch andere einfachere Möglichkeiten gibt, um diese Aufgabe zu erfüllen, aber ich bin nicht zu den komplexeren Dingen gekommen, da ich erst vor kurzem angefangen habe, Python zu lernen, und würde es vorläufig so machen.

On the left is the first part of the Program. On the right is the second.

Sie können auch deutlich sehen, die Leerräume gelassen werden, weil das Programm die URL bei jeder Erhöhung des Index druckt.

Jede Art von Hilfe würde sehr geschätzt werden.

Antwort

1

Ihre Suche beginnt mit index Satz 0, findet dann den href Text an Position 22. Sie erhöhen dann den Index 2, suchen wieder und wieder finden, den Text an der Position 22.

Wenn Sie möchten, Suche Vergangenheit das letzte Spiel fortzusetzen, müssen Sie index in eine Position nach das letzte Spiel setzen statt:

index = a + 1 

Jetzt th Der nächste text.find() Aufruf beginnt stattdessen mit dem Index 23 zu suchen.

Sie werden auch prüfen müssen, wenn der Text nicht gefunden:

if a < 0 or b < 0: 
    break 

Anstatt manuell durch Text wie folgt suchen, sollten Sie einen HTML-Parser verwenden. Ihre Suche wäre zum Beispiel mit BeautifulSoup trivial.

+0

Seine Arbeit, aber jetzt gibt es eine Endlosschleife. – Hamza

+0

@Katastrophe: Pause wenn 'a == -1 oder b == -1'. –

0

Ein alternativer Vorschlag:

for token in text.split('href="')[1:]: 
    print token.split('"')[0]