爬取全国未来十五天的天气数据(python3)
爬取全国未来十五天的天气数据
- 一、网页分析
- (一)请求分析(url)
- 1、观察
- 2、分析
- 3、结论
- (二)行政区域分析
- 1、观察
- 2、分析
- 3、结论
- (三)未来15日 天气数据分析
- 1、观察
- 2、分析
- 3、结论
- 二、数据提取
- (一)请求页面
- (二)根据url获取行政区域
- (三)获取未来15天的天气数据
- (四)数据保存
- (五)主函数
天气网站:https://www.tianqi.com/
一、网页分析
(一)请求分析(url)
1、观察
北京海淀区 天气预报15天:https://www.tianqi.com/haidian/15/
北京朝阳区 天气预报15天:https://www.tianqi.com/chaoyang/15/
北京朝阳区 天气预报30天:https://www.tianqi.com/chaoyang/30/
https://www.tianqi.com/haidian/15/
https://www.tianqi.com/chaoyang/30/
2、分析
- https://www.tianqi.com:网址
/haidian/:行政区域
15/:未来15天
3、结论
- 改变请求(url)中的“行政区域”部分就可以获取不同城市地区的未来15日天气数据。
(二)行政区域分析
1、观察
点击:【天气】——>【全国】
获取行政区域:https://www.tianqi.com/chinacity.html
2、分析
<div class=“citybox”>
- <h2>:包含省份(provinces)
- <span>:省份下的城市(citys)<a>
3、结论
通过提取 <div class=“citybox”> 下的信息就可获取到全国行政区域
(三)未来15日 天气数据分析
1、观察
重庆渝中未来15日天气:https://www.tianqi.com/yuzhongqu/15/
2、分析
<div class=“inleft”> :大类别
- <ul class=“weaul”>:未来15日天气数据
– <li>:每一天的天气数据
3、结论
通过提取 <div class=“inleft”> 下的信息就可获取每个城市未来15日的天气状况
二、数据提取
(一)请求页面
- get_html_soup(url) 函数,通过请求地址(url),返回soup(BeautifulSoup解析后的界面)
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36','Cookie': 'cityPy=kunming; cityPy_expire=1561950588; UM_distinctid=17133bbc7e6685-0b6045e36118e6-4313f6a-144000-17133bbc7e7a8e; CNZZDATA1275796416=1819259675-1585710340-%7C1585715624; Hm_lvt_ab6a683aa97a52202eab5b3a9042a8d2=1585710877,1585712908,1585712984,1585716742; Hm_lpvt_ab6a683aa97a52202eab5b3a9042a8d2=1585716834'
}'''
功能:请求页面
parameters: url:请求地址
return:soup:BeautifulSoup解析后的界面
'''
def get_html_soup(url):req = requests.get(url, headers=headers)req.encoding = 'utf-8'html = req.textsoup = BeautifulSoup(html, 'lxml')return soup
(二)根据url获取行政区域
<div class=“citybox”>
- <h2>:包含省份(provinces)
- <span>:省份下的城市(citys)<a>
get_admArea(url) 函数
- url:获取行政区域
- 返回provinces_citys:——格式:list[string]:string如:‘ 北京,/beijing/,海淀,/haidian/ ’
'''
功能:根据url获取行政区域
parameters:url:页面请求地址
return:provinces_citys:list[string]:【北京,/beijing/,海淀,/haidian/】
'''
def get_admArea(url):# 省份及其城市provinces_citys = []# 请求页面soup = get_html_soup(url)cityBox = soup.find('div', class_='citybox')province_list = cityBox.find_all('h2')city_list = cityBox.find_all('span')# print(len(province_list))#31# 提取数据for i in range(len(province_list)):# 省份province_name = province_list[i].a.get_text() # h2下的<a>标签下的内容province_url = province_list[i].a['href'] # h2下的<a>标签下的href# print(province_name,province_url)# 城市citys = city_list[i].find_all('a')for j in range(len(citys)):city_name = citys[j].get_text()city_url = citys[j]['href']str = province_name + ',' + province_url + ',' + city_name + ',' + city_url # 以字符串形式存储provinces_citys.append(str)# 返回省份及其城市return provinces_citys
(三)获取未来15天的天气数据
<div class=“inleft”> :大类别
- <ul class=“weaul”>:未来15日天气数据
– <li>:每一天的天气数据
get_15_weather(provinces_city, year) 函数:
- provinces_city:行政区域字符串string(格式:【北京,/beijing/,海淀,/haidian/】)
- year: 年份<class ‘str’>如:‘2020’
- 返回city_weather_list 天气状况:string‘北京,/beijing/,海淀,/haidian/,20200702,小雨,20,27,优,东风,2’
'''
功能:获取未来15天的天气数据
parameters:provinces_city:行政区域字符串string(格式:【北京,/beijing/,海淀,/haidian/】)year:年份<class 'str'>如:'2020'
return:city_weather_list天气状况:string‘北京,/beijing/,海淀,/haidian/,20200702,小雨,20,27,优,东风,2’
'''
def get_15_weather(provinces_city, year):year_now = year # 年份<class 'str'># https: // www.tianqi.com / yuzhongqu / 15 /city_weather_list = [] # 城市天气信息tianqi_url = 'http://tianqi.com' # 历史天气content_list = provinces_city.split(',') # 将每条行政区的信息转为list:‘北京’,’/beijing/‘,’海淀‘,’/haidian/‘city_tianqi_15_url = tianqi_url + content_list[3] + '15' # 构建未来15天天气urlsoup = get_html_soup(city_tianqi_15_url)div_temp = soup.find('div', class_='inleft')if (div_temp != None):weather_list = soup.find('div', class_='inleft').find('ul', class_='weaul').find_all('li')else:return None# print(weather_list)for i in range(len(weather_list)):li = weather_list[i]# 提取时间:月日str_temp = li.find_all('div')[0].get_text()time_m_d = ''.join(re.findall(r'\d+', str_temp)) # ['07', '01']——月日0701time_y_m_d = year_now + time_m_d# 过渡时间(跨年)判断处理if (time_m_d == '1231'):y = int(year_now)y += 1year_now = str(y)# 提取天气状况str_temp = li.find_all('div')[2].get_text() # 多云转小雨21~35℃weather_station = ''.join(re.findall(r'[\u4e00-\u9fa5]+', str_temp)) # 多云转小雨# 提取温度(最低、最高)temperature = re.findall(r'\d+', str_temp)temperature_min = temperature[0]temperature_max = temperature[1]# 提取空气质量air_quality = li.find_all('div')[3].span.get_text() # 多云转小雨21~35℃# 提取风向、风力等级str_temp = li.find_all('div')[4].get_text()wind = ''.join(re.findall(r'^[\u4e00-\u9fa5]+', str_temp))wind_scale = ''.join(re.findall(r'\d+', str_temp))weather = provinces_city + ',' + time_y_m_d + ',' + weather_station + ',' + temperature_min + ',' + temperature_max + ',' + air_quality + ',' + wind + ',' + wind_scalecity_weather_list.append(weather)return city_weather_list
(四)数据保存
- save_15_weather(weather_path, provinces_citys, year_now)
- weather_path: 保存地址,如 ‘citys_15_weather.csv’
- provinces_citys: 行政区域字符串list[string](格式:list【北京,/beijing/,海淀,/haidian/】)
- year_now: 当前年份 <class ‘str’>r如:‘2020’
'''
功能:保存未来15日天气
parameters:weather_path:'citys_15_weather.csv'provinces_citys:行政区域字符串list[string](格式:list【北京,/beijing/,海淀,/haidian/】)year_now:<class 'str'>r如:'2020'
return:None
'''
def save_15_weather(weather_path, provinces_citys, year_now):with open(weather_path, 'w', encoding='utf-8') as f:for i in range(len(provinces_citys)):city_weather_list = get_15_weather(provinces_citys[i], year_now)if (city_weather_list != None):for li in city_weather_list:f.write(li + '\n')else:continue
(五)主函数
if __name__ == '__main__':year_now = str(datetime.datetime.now().year) # 获取当前时间(年)path_15_weather = 'citys_15_weather.csv'#数据存放地址(根目录下)# 获得行政区域列表city_url = 'https://www.tianqi.com/chinacity.html' # 天气网站,用于爬取行政区provinces_citys = get_admArea(city_url) # <class 'list'>:【北京,/beijing/,海淀,/haidian/】# 保存未来15日天气数据save_15_weather(path_15_weather, provinces_citys, year_now)
爬取全国未来十五天的天气数据(python3)相关推荐
- Python爬虫实战之 爬取全国理工类大学数量+数据可视化
上次爬取高考分数线这部分收了个尾,今天咱们来全面爬取全国各省有多少所理工类大学,并简单实现一个数据可视化.话不多说,咱们开始吧. 第一步,拿到url地址 第二步,获取高校数据 第三步,地图可视化 第四 ...
- Python爬虫学习第三章-4.3-使用xpath解析爬取全国城市名称
Python爬虫学习第三章-4.3-使用xpath解析爬取全国城市名称 这一节主要是使用xpath解析爬取全国城市名称 这里使用的网址是:空气质量历史数据查询 这一个案例体现的点主要是xpat ...
- 爬取全国任意省份天气数据详细步骤
前几天河南天天下雨,在家憋得难受就尝试写一个爬取全国天气数据的爬虫,在此分享详细过程. (图一) 打开上图所标记的页面得到Windows官网的天气数据(图一) (图二) 老样子,此处我们按下F12打开 ...
- 每日一练:Python爬虫爬取全国新冠肺炎疫情数据实例详解,使用beautifulsoup4库实现
Python 爬虫篇 - 爬取全国新冠肺炎疫情数据实例详解 效果图展示 第一章:疫情信息的下载与数据提取 ① 爬取页面数据到本地 ② json 字符串正则表达式分析 ③ 提取数据中的 json 字符串 ...
- 爬虫小白入门实例 —— 爬取全国某天所有火车的运行时刻表
受好朋友的委托,帮忙爬取全国某天所有火车的运行时刻表. 在此之前没有用过爬虫,但是会用python,所以迅速学习了一下. 把自己的学习过程整理如下,爬虫小白可以通过下述内容快速入门. 任务描述: 爬取 ...
- 【爬虫实战】Python 自制天气预报程序!爬取全国天气网
学会了爬虫,让我们自制一个天气预报的爬虫吧! 需求分析 1.用 requests 爬取 全国天气网 的网页源代码: 2.用 pyquery 解析网页源代码,取得天气情况信息的节点: 3.用 xlwt ...
- selenium + bs4 +requests 爬取全国电动汽车充电站数据
0.说明 本文章仅用于python爬虫的学习,爬取到的数据仅用于学习.竞赛等非营利活动,如有侵权请及时联系. 1.简单介绍 我们在爬虫时,往往都是静态界面,或者没有嵌套的的界面,直接使用request ...
- 爬取全国各地区汽车销量情况并用中国地图可视化展示
爬取全国各地区汽车销量情况并用中国地图可视化展示 项目介绍 网页详情 代码 爬取数据代码 将爬取的数据保存到文档中 中国地图可视化 运行效果 项目介绍 爬取2017年全国各省份的汽车销量情况(由于数据 ...
- Python爬取全国大学排名 用pyecharts进行大屏可视化
爬取全国大学排名 用pyecharts进行可视化 院校网址:http://college.gaokao.com/schlist/p F12 先找到对应的全部list 需要先安装requests,lxm ...
最新文章
- 1.12 foreach循环遍历Collection集合
- [VS2005]一个简单的CodeSnippet —— 生成类的构造函数。
- LiveVideoStackCon 2022 上海站延期通告(内附最新日程海报)
- windows环境下memcache服务器使用经验
- Asp.net五大对象
- matlab数值模拟的例子,第12章 MATLAB 数值模拟实例解析课件
- redis 安装简介
- jquery发送ajax请求返回数据格式
- git安装 tor_【git安装教程 windows】怎么装git window_git安装配置教程
- vb与php通讯加密,在VB.NET中加密和在PHP中解密
- lab2 binary bomb 详解
- 讲讲传奇架设教程跟传奇开区教程,我们首先要明白传奇如何形成
- docker部署es和kibana遇到的坑
- hdmi怎么支持2k分辨率_为什么显示器闪瞎眼 HDMI线版本有讲究
- LeetCode题解(1628):设计带解析函数的表达式树(Python)
- C ++ 程序调用CUDA静态库
- 洛谷 P2404 自然数的拆分问题(搜索、保证顺序进行搜索)
- 使用Gephi绘制动态网络的三种方法
- 北京租房心经--教你如何北京租房
- C305例会-电脑攒机
热门文章
- 561. Array Partition I
- conversion function
- 每日安全简讯20160719
- 前端开发必备之MDN(API查阅文档)
- Cheat Engine 小白教程(大白话教学 下篇
- 密室鼻祖 深红色房间超详细攻略
- jenkins安装github插件后还是找不到 Build when a change is pushed to GitHub
- ThreeJS - 修复摄像机近距离模型或者摄像机在某些观察角度3D模型部分或者全部不可见的问题
- nginx connect()错误(10061: No connection could be made because the target machine actively refused it)
- Python学习笔记 - 探索while无限迭代循环