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

老规矩,先上代码:

import 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'<b>(.*?)</b>'
    res2 = r'<td>(.*?)</td>'
    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,发现页面上的最高 温度和最低温度都是在<b></b>里面,所以用正则表达式:

res1 = r'<b>(.*?)</b>'
wendu_list = re.findall(res1,response) # 获取温度

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

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

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

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

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

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

企图去除多余的符号。

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

于是修改成

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

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

  • 6
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值