龙空技术网

Python爬虫案例:继续爬取城市天气预报和生活指数

风清云淡话编程 63

前言:

此刻你们对“获取页面信息的方法”都比较注意,我们都想要了解一些“获取页面信息的方法”的相关资讯。那么小编在网上汇集了一些对于“获取页面信息的方法””的相关内容,希望大家能喜欢,你们一起来学习一下吧!

上一篇文章,我们讲解了,从中央气象台网站,爬取“武汉”城市的7天天气预报,本篇将接着讲解如何继续爬取城市3小时分时段天气预报和生活指数。如下图所示,红色加框的部分。

1.解析生活指数信息

分析forecast_text的内容,我们发现,共有6种指数,分别为:感冒指数、运动指数、过敏指数、穿衣指数、洗车指数、紫外线指数,而且每种指数有三行内容。

为了解析指数内容,我编写了如下函数,lines:就是forecast_text每行的内容,index:取值,感冒指数、运动指数、过敏指数、穿衣指数、洗车指数、紫外线指数6种中的其中一种。返回值为index的7天的指数预报。

def get_index(lines,index):    index_str = '';    for i in range(len(lines)):        if lines[i]==index:            index_str = index_str + lines[i-1]+' '+ lines[i]+' '+lines[i+1]+'\n'    return index_str
2.调用函数解析并保存生活指数

调用函数get_index,将其内容保存在index_weather.txt文件中。

# 写文件index_weather.txt,保存7天指数预报file = open('index_weather.txt','w',encoding='UTF-8')file.write(get_index(lines,"感冒指数"))file.write(get_index(lines,"运动指数"))file.write(get_index(lines,"过敏指数"))file.write(get_index(lines,"穿衣指数"))file.write(get_index(lines,"洗车指数"))file.write(get_index(lines,"紫外线指数"))file.close() 

index_weather.txt的具体内容如下:

3.提取分时段天气预报

分析forecast_text的内容,我们发现,分时段天气预报的信息在以,var hour3data= 开头的一行字符串中。具体内容如下所示:

var hour3data={"1d":["02日20时,n02,阴,25℃,无持续风向,<3级,0","02日23时,n01,多云,23℃,东北风,<3级,0","03日02时,n01,多云,23℃,东北风,<3级,0","03日05时,n01,多云,22℃,东北风,<3级,0","03日08时,d01,多云,24℃,东北风,<3级,2","03日11时,d01,多云,28℃,北风,<3级,2","03日14时,d01,多云,29℃,东风,<3级,2","03日17时,d01,多云,30℃,东风,<3级,2","03日20时,n01,多云,26℃,南风,<3级,0"],"23d":[["03日08时,d01,多云,24℃,东北风,<3级,2","03日11时,d01,多云,28℃,北风,<3级,2","03日14时,d01,多云,29℃,东风,<3级,2","03日17时,d01,多云,30℃,东风,<3级,2","03日20时,n01,多云,26℃,南风,<3级,0","03日23时,n02,阴,23℃,东风,<3级,0","04日02时,n02,阴,22℃,北风,<3级,0","04日05时,n03,阵雨,22℃,东北风,<3级,0"],["09日08时,d00,晴,26℃,东北风,<3级,1","09日14时,d00,晴,32℃,东风,<3级,1","09日20时,n00,晴,26℃,东风,<3级,0"]],"7d":[["02日20时,n02,阴,25℃,无持续风向,<3级,0","02日23时,n01,多云,23℃,东北风,<3级,0","03日02时,n01,多云,23℃,东北风,<3级,0","03日05时,n01,多云,22℃,东北风,<3级,0"],["03日08时,d01,多云,24℃,东北风,<3级,2","03日11时,d01,多云,28℃,北风,<3级,2","03日14时,d01,多云,29℃,东风,<3级,2","03日17时,d01,多云,30℃,东风,<3级,2","03日20时,n01,多云,26℃,南风,<3级,0","03日23时,n02,阴,23℃,东风,<3级,0","04日02时,n02,阴,22℃,北风,<3级,0","04日05时,n03,阵雨,22℃,东北风,<3级,0"],["04日08时,d03,阵雨,24℃,北风,<3级,3","04日11时,d03,阵雨,27℃,东北风,<3级,3","04日14时,d03,阵雨,29℃,东北风,<3级,3","04日17时,d03,阵雨,27℃,南风,<3级,3","04日20时,n03,阵雨,25℃,西风,<3级,0","04日23时,n01,多云,24℃,北风,<3级,0","05日02时,n01,多云,24℃,东北风,<3级,0","05日05时,n01,多云,24℃,北风,<3级,0"],["05日08时,d01,多云,27℃,北风,<3级,2","05日11时,d01,多云,29℃,东北风,<3级,2","05日14时,d01,多云,32℃,东北风,<3级,2","05日17时,d01,多云,31℃,东北风,<3级,2","05日20时,n01,多云,29℃,东北风,<3级,0","06日02时,n00,晴,23℃,东北风,<3级,0"],["06日08时,d00,晴,27℃,东北风,<3级,1","06日14时,d07,小雨,31℃,东北风,<3级,3","06日20时,n01,多云,27℃,东北风,<3级,0","07日02时,n00,晴,23℃,东北风,<3级,0"],["07日08时,d00,晴,25℃,东北风,<3级,1","07日14时,d00,晴,32℃,东北风,<3级,1","07日20时,n00,晴,27℃,东风,<3级,0","08日02时,n00,晴,21℃,东南风,<3级,0"],["08日08时,d00,晴,24℃,东风,<3级,1","08日14时,d00,晴,30℃,东北风,<3级,1","08日20时,n00,晴,25℃,东南风,<3级,0","09日02时,n00,晴,21℃,东北风,<3级,0"],["09日08时,d00,晴,26℃,东北风,<3级,1","09日14时,d00,晴,32℃,东风,<3级,1","09日20时,n00,晴,26℃,东风,<3级,0"]]}

forecast_text的内容片段

为了得到分时段天气预报的具体信息,我编写了get_section_forecast函数,lines:就是forecast_text每行的内容,prefix:即使字符串的前缀,取值:var hour3data=,

def get_section_forecast(lines,prefix):        str_len = len(prefix)    for i in range(len(lines)):        if lines[i][0:str_len]==prefix:            return lines[i][str_len:]     return ''

去掉前缀后,后面的信息就是分时段天气预报的具体信息,而且还是json字符串。

4.json解析分时段天气预报并保存

调用函数get_section_forecast,提取了分时段天气预报的字符串,并用json进行解析,7d的标签就是3小时分时段天气预报,解析的同时,将其内容保存在day7_3h_weather.txt文件中。

import json# 提取json字符串json_str = get_section_forecast(lines,"var hour3data=")forecast = json.loads(json_str)ww_3h_7d = forecast['7d']# 写文件day7_3h_weather.txt,保存3小时预报file = open('day7_3h_weather.txt','w',encoding='UTF-8')for i in range(len(ww_3h_7d)):    ww_3h = ww_3h_7d[i]    for ii in range(len(ww_3h)):        file.write(ww_3h[ii]+"\n")file.close() 

day7_3h_weather.txt的具体内容如下:

总结:两篇文章,通过网络爬虫技术,获得网页信息,使用BeautifulSoup并对返回的内容进行解析,解析涉及字符串的处理、json内容的解析,最后保存数据到文本文件。

如果粉丝需要完整版的程序,可以私下与我联系。

最后,由于平台规则,只有当您跟我有更多互动的时候,才会被认定为铁粉。如果您喜欢我的文章,可以点个“关注”,成为铁粉后能第一时间收到文章推送。

标签: #获取页面信息的方法 #python爬取天气数据代码运行成功没有图