将'for'循环转换为'while'循环
我需要将for循环转换为while循环的帮助,while循环只打印/记录差异/更改为xml。将'for'循环转换为'while'循环
这是我目前的代码。
import requests
from bs4 import BeautifulSoup
url = "https://www.ruvilla.com/media/sitemaps/sitemap.xml"
r = requests.get(url)
soup = BeautifulSoup(r.content)
for url in soup.find_all("url"):
titlenode = url.find("loc")
if titlenode:
title = titlenode.text
loc = url.find("loc").text
lastmod = url.find("lastmod").text
print title + "\n" + lastmod
对于您当前的用例,for循环的效果最好。但是,如果你真的想使之成为一个while循环,你能做到这一点,像这样:
urls = soup.find_all("url")
counter = 0
while counter < len(urls)-1:
counter += 1
url = urls[counter]
#Your code here
现在我将如何完成24/7全天候运行并打印xml的新编辑的最后一个mod元素? – D0USMOKEHAZE
如果我明白你的问题正确,你尝试登录只有已lastmod
属性相关联的URL。对于这种情况,for
循环最适合代替while
,因为它在到达列表末尾时自动结束迭代。和while循环一样,你必须明确地处理像i < len(size)
这样的检查。你可以考虑以下:
while True:. # Loop infinitely
r = requests.get(url)
soup = BeautifulSoup(r.content)
for url in soup.find_all('url'):
lastmod = url.find("lastmod").text
if not lastmod:
continue
loc = url.find("loc").text
titlenode = url.find("loc")
if titlenode:
title = titlenode.text
time.sleep(1)
的try-except
块,以确保lastmod
是否存在印刷的细节。否则,忽略并转到下一个URL。希望这可以帮助。干杯。
谢谢。但我如何确保它保持运行并打印最新的变化,而不是整个XML? – D0USMOKEHAZE
您必须在Linux中使用crontab在后台运行脚本,或者让该脚本在后台运行。 –
是的,我使用byobu,但是,如果我想这个迭代继续运行找到所有新的更改到xml,我将不得不让它一个while循环正确?多数民众赞成即时尝试实现,不断监测网站地图的新变化,并打印这些变化。 – D0USMOKEHAZE
为什么你想把它变成一个while循环? – theonlygusti