2016-10-22 80 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]