2016-10-22 67 views
0

我有一個代碼,它使用while循環打印網頁的<a href></a>標記中包含的任何內容。我可以提取所需的索引以及它們之間寫入的內容,也可以打印它們。該程序應該只打印一次url,然後繼續前進並增加索引,直到找到<a href></a>的下一個索引值,打印它們之間的任何內容並繼續這樣做直到字符串結束,打印每個新的網址都在單獨的一行中找到。這裏是代碼:多次Python程序打印結果

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 

但是,當我運行該程序時,它出現故障,如圖像所示。

顯然我在這裏使用的邏輯是錯誤的。我知道還有其他更簡單的方法可以完成這個任務,但是我沒有找到更復雜的東西,因爲我最近纔開始學習Python,並且現在想要這樣做。

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

您也可以清楚地看到空格被冷落,因爲程序將打印網址在索引的每一個增量。

任何形式的幫助將不勝感激。與index設置爲0

回答

1

你開始搜索,然後發現在22位的href文本然後遞增指數2,再次搜索,並再次找到在22位

文本如果你想搜索繼續過去的最後一場比賽,你需要設置index的位置後的最後一場比賽,而不是:

index = a + 1 

現在日e下一個text.find()調用開始在索引23處搜索。

您還需要進行測試,如果文本是發現:

if a < 0 or b < 0: 
    break 

而不是通過這樣的文字手動搜索,可以考慮使用HTML解析器。例如,您的搜索將是微不足道的,例如BeautifulSoup

+0

它的工作,但現在有一個無限循環。 – Hamza

+0

@Catastrophe:當'a == -1或b == -1'時中斷。 –

0

另外一個建議:

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