2016-04-21 66 views
0

嗨,我是新的python,現在我正在學習如何刮網站。我正在練習循環功能。這裏是問題如何在Python中設置兩個循環?

i)我正在使用天氣站點來獲取兩個數據:天氣和溫度。

ii)在該網站的網址中,它包含日期和城市。

麻煩是我只能控制循環的一面,我搜索了網站,沒有找到答案。

以下是我寫的代碼。

# -*- coding: utf-8 -*- 
import requests 
from bs4 import BeautifulSoup 
import time 

calday = ["01","02","03","04","05"...."31"] 
citylist = ["Newyork","London","Paris"] 
for i in range(len(calday)): 
for i in range(len(citylist)): 
    url="http://websitename.com/localeCode=en_US&complexSearchField="+citylist[i]+"&05%2F"+calday+"2F2015" # 05%2F01%2F2015 which means 2015-05-01 and the day is replaced by "+calday+" 

    wb_data = requests.get(url,headers=headers) 
    soup = BeautifulSoup(wb_data.text,'lxml') 
    weathers = soup.select('.searchResultsweather') 
    temps = soup.select('.searchResultstemp') 
    time.sleep(2) 
    for temp,weather in zip(temps,weathers): 
     data = { 
     "temp":temp.get_text(), 
     "weather":weather.get_text() 
     } 
     print (data) 

我知道有更好的方法來治療的日期模塊,但現在我對如何實現兩個迴路,並得到類似的結果卡住:

紐約MAY1臨時天氣

紐約MAY2臨時天氣

...

紐約may31臨時天氣

,然後轉到倫敦和巴黎的相同格式。

在此先感謝。

回答

4

你的問題是在這裏:

for i in range(len(calday)): 
    for i in range(len(citylist)): 

您正在使用兩個環路同一循環變量(i)。使用更具描述性的名稱,這將是固定:

for dayidx in range(len(calday)): 
    for cityidx in range(len(citylist)): 

但更好的是,你不需要做數字索引的。只是遍歷值的列表:

for day in calday: 
    for city in citylist: 
     url = "http://websitename.com/localeCode=en_US&complexSearchField="+city+"&05%2F"+day+"2F2015" 
1

您應該解決您的壓痕,並把不同的變量在這裏:

for i in range(len(calday)): 
for i in range(len(citylist)): 

更改爲

for i in range(len(calday)): 
    for j in range(len(citylist)): #note the j here 

Python是它採用縮進語言作爲塊。如果您的calday和citylist都使用相同的變量,則無法單獨訪問它們。