以下程序会导致无限循环。一旦我读完所有链接,我如何停止继续?谢谢。
def findAllURLs():
with open('manylinks.html', 'r') as f:
data = f.read()
start = data.find('href')
while(True):
begin = data.find('"',start)
end = data.find('"',begin+1)
print data[begin+1:end]
start = data.find('href',end + 1)
if __name__ == "__main__":
findAllURLs()
答案 0 :(得分:2)
如果您使用适当的工具来解析HTML,则无需使用while
循环。我建议您使用BeautifulSoup 4库来解析文档:
import bs4
def find_all_urls():
with open('manylinks.html', 'r') as f:
soup = bs4.BeautifulSoup(f)
for i in soup.find_all('a', href=True):
print(i['href'])
if __name__ == '__main__':
find_all_urls()
这只会找到<a>
个href
元素,例如省略<link href=>
。如果您也想要link
个元素,请使用soup.find_all(href=True)
答案 1 :(得分:1)
您应该以这种方式修改代码:
def findAllURLs():
with open('manylinks.html', 'r') as f:
data = f.read()
start = data.find('href')
while(start != -1):
begin = data.find('"',start)
end = data.find('"',begin+1)
print data[begin+1:end]
start = data.find('href',end + 1)
if __name__ == "__main__":
findAllURLs()
实际上,当find
无法找到任何其他匹配项时,while
将返回-1,从而结束z-index
循环。