将' for -loop转换为' while' -loop

时间:2017-09-24 16:17:02

标签: python python-2.7 web-scraping

我需要帮助将for循环转换为while循环,它只会打印/记录差异/更改为xml。

这是我目前的代码。

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

2 个答案:

答案 0 :(得分:1)

对于您当前的用例,for循环效果最佳。但是,如果你真的想进入while循环,你可以这样做:

urls = soup.find_all("url")
counter = 0
while counter < len(urls)-1:
    counter += 1
    url = urls[counter]
    #Your code here

答案 1 :(得分:0)

如果我正确理解了您的问题,那么您只想记录与lastmod属性关联的网址。对于这种情况,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。希望这可以帮助。欢呼声。