pythonは中国の天気網に登って最低温度を示した.

3174 ワード

import requests
from bs4 import BeautifulSoup
import lxml
import json
from echarts import Echart,Bar,Axis
import time

#        
weather_list = []
#    
city_list = []
#    
lowest_list =[]

#    
def getTemperature(url):
    result = requests.get(url)
    #print result.content
    soup = BeautifulSoup(result.content,'lxml')
    div_conMidTab =  soup.find("div",attrs={'class':'conMidtab'})
    div_conMidTab2 = div_conMidTab.find_all("div",attrs={'class':'conMidtab2'})
    for x in div_conMidTab2:
        tr_list = x.find_all("tr")[2:]
        provider =''
        for index,tr in enumerate(tr_list):
            td_list = tr.find_all('td')
            if index ==0:
                provider = td_list[0].text.replace('
','') city = td_list[1].text.replace('
','') # hight_temperature = td_list[4].text # low_temperatrue = td_list[7].text else: city = td_list[0].text.replace('
','') # hight_temperature = td_list[3].text # low_temperatrue = td_list[6].text print provider+' '+city+' '+low_temperatrue+'~'+hight_temperature weather_list.append({ 'city':provider+city, 'min':low_temperatrue }) city_list.append(provider+city) lowest_list.append(low_temperatrue) print '-' * 40 def main(): result = requests.get('http://www.weather.com.cn/textFC/hb.shtml') soup = BeautifulSoup(result.content,'lxml') # , ... url , li_list = soup.find("ul",attrs={'class':'lq_contentboxTab2'}).find_all('li')[0:-1] # for li in li_list: url = 'http://www.weather.com.cn/'+li.find('a')['href'] getTemperature(url) time.sleep(1) # # line = json.dumps(weather_list,ensure_ascii=False) # with open ('weather.json','w') as fp: # fp.write(line.encode('utf-8')) # json # with open('weather.json', 'r') as fp: # weather_list = json.load(fp,encoding='utf-8') # sort_weather_list = sorted(weather_list,lambda x,y:cmp(int(x['min']),int(y['min']))) # 20 TOP10_SORT_WEATHER_LIST = sort_weather_list[0:20] TOP10_CITY = [] TOP10_MIN = [] # for city_min in TOP10_SORT_WEATHER_LIST: TOP10_CITY.append(city_min['city']) TOP10_MIN.append(city_min['min']) # echart = Echart(u' ',' ') # bar = Bar(u' ',TOP10_MIN) # axis = Axis('category','bottom',data = TOP10_CITY) echart.use(bar) echart.use(axis) echart.plot() if __name__ == '__main__': main()