2017-09-24 222 views
-3

我需要將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 
+0

爲什麼你想把它變成一個while循環? – theonlygusti

回答

1

對於您當前的用例,for循環的效果最好。但是,如果你真的想使之成爲一個while循環,你能做到這一點,像這樣:

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

現在我將如何完成24/7全天候運行並打印xml的新編輯的最後一個mod元素? – D0USMOKEHAZE

0

如果我明白你的問題正確,你嘗試登錄只有已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。希望這可以幫助。乾杯。

+0

謝謝。但我如何確保它保持運行並打印最新的變化,而不是整個XML? – D0USMOKEHAZE

+0

您必須在Linux中使用crontab在後臺運行腳本,或者讓該腳本在後臺運行。 –

+0

是的,我使用byobu,但是,如果我想這個迭代繼續運行找到所有新的更改到xml,我將不得不讓它一個while循環正確?多數民衆贊成即時嘗試實現,不斷監測網站地圖的新變化,並打印這些變化。 – D0USMOKEHAZE