Python爬虫之爬取“天气后报网”的天气历史信息

您所在的位置:网站首页 python爬虫天气后报网 Python爬虫之爬取“天气后报网”的天气历史信息

Python爬虫之爬取“天气后报网”的天气历史信息

2023-10-05 04:54| 来源: 网络整理| 查看: 265

老规矩,先上代码:

1234567891011121314151617181920212223import re import requests def go_this_time(city,time):     url = "http://www.tianqihoubao.com/lishi/{0}/{1}.html".format(city,time)     response = requests.get(url).content.decode("gbk").replace('\n','').replace('\t','').replace(' ','').replace('\r','')     res1 = r'(.*?)'     res2 = r'(.*?)'     res3 = r'alt=\'(.*?)\''     wendu_list = re.findall(res1,response) # 获取温度     tianqi_list = re.findall(res2,response) # 获取天气     height = wendu_list[2] # 该天最高温度     low = wendu_list[3] # 该天最低温度     night_weather = re.findall(res3,tianqi_list[2]) # 夜晚天气     daytime_wind = tianqi_list[5] # 白天风力     day_weather = re.findall(res3,tianqi_list[1]) # 白天天气     night_wind = tianqi_list[6] # 夜晚风力     print("该天最高温度:" + height)     print("该天最低温度:" + low)     print("白天风力:"+daytime_wind)     print("夜晚风力:"+night_wind)     return height,low,daytime_wind,night_wind,day_weather[0],night_weather[0] print(go_this_time("chengdu","20201010"))

-----------------------------------------------------------------------------------------------------------------------------------

好!我们现在开始分析,先清楚需求:这个爬虫的目的是爬取某城市的某天的天气信息。

从需求上看,要有2个变量:城市,日期。

那么我们要爬那个网站的数据呢?http://www.tianqihoubao.com

进入网站主页

例如我要查看成都11月12日的历史天气:

我们可以发现一个规律,历史天气页面的地址变化的只有城市的拼音和日期。如:chengdu/20201112,换言之,我要是想进入北京11月12日的历史天气页面只需要更改url为:beijing/20201112.于是代码中才会出现:url = "http://www.tianqihoubao.com/lishi/{0}/{1}.html".format(city,time)

目的就是通过接受不同的城市和日期来控制我们想进入的历史界面。

只要进入想进入的历史界面事情就好办了,我们现在来获取页面的数据:

按f12,发现页面上的最高 温度和最低温度都是在里面,所以用正则表达式:

1res1 = r'(.*?)' 1wendu_list = re.findall(res1,response) # 获取温度

筛选出所有里面的内容(也就是最高温度和最低温度),以list形式输出。

打印这个list得知最高温度和最低温度是webdu_llist[2]和wendu_list[3],所以:

height = wendu_list[2] # 该天最高温度 low = wendu_list[3] # 该天最低温度

获取“天气状况”的时候,遇到一个问题

“多云”的文本和正常的文本不大一样,我猜测是空格符,于是用了

1response = requests.get(url).content.decode("gbk").replace('\n','').replace('\t','').replace(' ','')

企图去除多余的符号。

问题还是出现了,最后分割alt="多云"”,并不能把“多云”分割出来。原因是我去除了空格符但是截出来的文本中出现了“\r”,也就是回车符。

于是修改成

1response = requests.get(url).content.decode("gbk").replace('\n','').replace('\t','').replace(' ','').replace('\r','')

把回车符也去除掉。分割终于正常了。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3