2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > python爬虫爬取中国天气网_初识python 之 爬虫:爬取中国天气网数据

python爬虫爬取中国天气网_初识python 之 爬虫:爬取中国天气网数据

时间:2022-03-03 06:06:09

相关推荐

python爬虫爬取中国天气网_初识python 之 爬虫:爬取中国天气网数据

1 #!/user/bin env python

2 #author:Simple-Sir

3 #time:/7/25 21:16

4 #爬取中国天气网数据

5

6 importrequests,html5lib7 from bs4 importBeautifulSoup8 from pyecharts.charts import Bar #官方已取消 pyecharts.Bar 方式导入

9 from pyecharts importoptions10 from pyecharts.globals importThemeType11 from datetime importdatetime12

13 WEARTHER_DATE =[] #城市天气数据列表

14

15 defurlText(url):16 '''

17 获取网页HTML代码,并解析成文本格式18 :param url: 网页url地址19 :return: 解析之后的html文本20 '''

21 headers ={22 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'

23 }24 respons = requests.get(url, headers=headers) #获取网页信息

25 text = respons.content.decode('utf-8') #解析网页

26 returntext27

28 defgetDiv(url,area):29 '''

30 获取需要的html标签:城市、最高温度31 :param url:32 :param area: 区域:全国、全省(四川) 0:全国、其他任意值:全市33 :return:34 '''

35 text =urlText(url)36 #soup = BeautifulSoup(text,'lxml') # 港澳台html中table标签解析错误

37 soup = BeautifulSoup(text, 'html5lib') #html5lib 容错性比lxml高

38 conMidtab = soup.find_all('div',class_="conMidtab")[1] #获取“明天”的天气

39 if area == '四川':40 #获取四川所有城市天气

41 trs = conMidtab.find_all('tr')[2:]42 for tr intrs:43 tds = tr.find_all('td')44 city_td =tds[0]45 city = list(city_td.stripped_strings)[0] #区县

46 temp_td = tds[-5] #倒数第5个td标签

47 temp = list(temp_td.stripped_strings)[0] #最高温度

48 print('正在获取 {} 的最高气温:{}'.format(city, temp))49 WEARTHER_DATE.append({'城市': city, '最高温度': int(temp)})50 else:51 #获取全国城市天气

52 tables = conMidtab.find_all('table')53 for t intables:54 trs = t.find_all('tr')[2:]55 for index, tr inenumerate(trs):56 tds = tr.find_all('td')57 if index ==0:58 city_td = tds[1] #city_td = tds[-8] # 港澳台格式错误

59 else:60 city_td =tds[0]61 city = list(city_td.stripped_strings)[0] #区县

62 temp_td = tds[-5] #倒数第5个td标签

63 temp = list(temp_td.stripped_strings)[0] #最高温度

64 print('正在获取 {} 的最高气温:{}'.format(city,temp))65 WEARTHER_DATE.append({'城市': city, '最高温度': int(temp)})66

67

68 #可视化数据,对城市温度排名

69 #def getRownum(data):

70 #max_temp = data['最高温度'] # 把列表里的每一项当作参数传进来,再获取“最高温度”这一项的值

71 #return max_temp

72 #WEARTHER_DATE.sort(key=getRownum) # 功能和它一样:WEARTHER_DATE.sort(key=lambda data:data['最高温度'])

73

74 defmain():75 city_list =['hb','db','hd','hz','hn','xb','xn','gat','sichuan']76 getcity = input('您要获取“全国”还是“四川”的最高温度排名?\n')77 if getcity=='四川':78 url = '/textFC/{}.shtml'.format(city_list[-1])79 getDiv(url,getcity)80 else:81 for cl in city_list[:-1]:82 url = '/textFC/{}.shtml'.format(cl)83 getDiv(url,getcity)84 print('正在对天气温度进行排序处理...')85 WEARTHER_DATE.sort(key=lambda data: int(data['最高温度'])) #对列表中的字典数据排序,温度从低到高

86 WEARTHER_DATE.reverse() #把对列表反转,温度从高到低

87 rownum = WEARTHER_DATE[:10] #获取最高温度排名前十的城市

88 print('正在绘制图表...')89 #分别获取城市、温度列表

90 #原始方法:

91 #citys=[]

92 #temps=[]

93 #for i in rownum:

94 #citys.append(i['城市'])

95 #temps.append(i['最高温度'])

96

97 #高端方法:

98 citys = list(map(lambda x: x['城市'], rownum)) #使用map分离出城市

99 temps = list(map(lambda x: x['最高温度'], rownum)) #使用map分离出最高温度

100 #通过使用pyecharts的Bar可视化数据,附官方中文API地址:/#/

101 bar = Bar(init_opts = options.InitOpts(theme=ThemeType.DARK)) #对表格添加主题

102 bar.add_xaxis(citys)103 bar.add_yaxis('',temps)104 tim = datetime.now().strftime('%Y-%m-%d')105 bar.set_global_opts(title_opts={'text':'中国天气网 {} 城市明日最高温度排名前十({})'.format(getcity,tim)})106 bar.render('中国天气网城市最高温度排名.html')107 print('图表绘制已完成,结果已写入文件,请查看。')108 if __name__ == '__main__':109 main()

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。