爬取全国未来十五天的天气数据

  • 一、网页分析
    • (一)请求分析(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)相关推荐

  1. Python爬虫实战之 爬取全国理工类大学数量+数据可视化

    上次爬取高考分数线这部分收了个尾,今天咱们来全面爬取全国各省有多少所理工类大学,并简单实现一个数据可视化.话不多说,咱们开始吧. 第一步,拿到url地址 第二步,获取高校数据 第三步,地图可视化 第四 ...

  2. Python爬虫学习第三章-4.3-使用xpath解析爬取全国城市名称

    Python爬虫学习第三章-4.3-使用xpath解析爬取全国城市名称   这一节主要是使用xpath解析爬取全国城市名称 这里使用的网址是:空气质量历史数据查询   这一个案例体现的点主要是xpat ...

  3. 爬取全国任意省份天气数据详细步骤

    前几天河南天天下雨,在家憋得难受就尝试写一个爬取全国天气数据的爬虫,在此分享详细过程. (图一) 打开上图所标记的页面得到Windows官网的天气数据(图一) (图二) 老样子,此处我们按下F12打开 ...

  4. 每日一练:Python爬虫爬取全国新冠肺炎疫情数据实例详解,使用beautifulsoup4库实现

    Python 爬虫篇 - 爬取全国新冠肺炎疫情数据实例详解 效果图展示 第一章:疫情信息的下载与数据提取 ① 爬取页面数据到本地 ② json 字符串正则表达式分析 ③ 提取数据中的 json 字符串 ...

  5. 爬虫小白入门实例 —— 爬取全国某天所有火车的运行时刻表

    受好朋友的委托,帮忙爬取全国某天所有火车的运行时刻表. 在此之前没有用过爬虫,但是会用python,所以迅速学习了一下. 把自己的学习过程整理如下,爬虫小白可以通过下述内容快速入门. 任务描述: 爬取 ...

  6. 【爬虫实战】Python 自制天气预报程序!爬取全国天气网

    学会了爬虫,让我们自制一个天气预报的爬虫吧! 需求分析 1.用 requests 爬取 全国天气网 的网页源代码: 2.用 pyquery 解析网页源代码,取得天气情况信息的节点: 3.用 xlwt ...

  7. selenium + bs4 +requests 爬取全国电动汽车充电站数据

    0.说明 本文章仅用于python爬虫的学习,爬取到的数据仅用于学习.竞赛等非营利活动,如有侵权请及时联系. 1.简单介绍 我们在爬虫时,往往都是静态界面,或者没有嵌套的的界面,直接使用request ...

  8. 爬取全国各地区汽车销量情况并用中国地图可视化展示

    爬取全国各地区汽车销量情况并用中国地图可视化展示 项目介绍 网页详情 代码 爬取数据代码 将爬取的数据保存到文档中 中国地图可视化 运行效果 项目介绍 爬取2017年全国各省份的汽车销量情况(由于数据 ...

  9. Python爬取全国大学排名 用pyecharts进行大屏可视化

    爬取全国大学排名 用pyecharts进行可视化 院校网址:http://college.gaokao.com/schlist/p F12 先找到对应的全部list 需要先安装requests,lxm ...

最新文章

  1. 1.12 foreach循环遍历Collection集合
  2. [VS2005]一个简单的CodeSnippet —— 生成类的构造函数。
  3. LiveVideoStackCon 2022 上海站延期通告(内附最新日程海报)
  4. windows环境下memcache服务器使用经验
  5. Asp.net五大对象
  6. matlab数值模拟的例子,第12章 MATLAB 数值模拟实例解析课件
  7. redis 安装简介
  8. jquery发送ajax请求返回数据格式
  9. git安装 tor_【git安装教程 windows】怎么装git window_git安装配置教程
  10. vb与php通讯加密,在VB.NET中加密和在PHP中解密
  11. lab2 binary bomb 详解
  12. 讲讲传奇架设教程跟传奇开区教程,我们首先要明白传奇如何形成
  13. docker部署es和kibana遇到的坑
  14. hdmi怎么支持2k分辨率_为什么显示器闪瞎眼 HDMI线版本有讲究
  15. LeetCode题解(1628):设计带解析函数的表达式树(Python)
  16. C ++ 程序调用CUDA静态库
  17. 洛谷 P2404 自然数的拆分问题(搜索、保证顺序进行搜索)
  18. 使用Gephi绘制动态网络的三种方法
  19. 北京租房心经--教你如何北京租房
  20. C305例会-电脑攒机

热门文章

  1. 561. Array Partition I
  2. conversion function
  3. 每日安全简讯20160719
  4. 前端开发必备之MDN(API查阅文档)
  5. Cheat Engine 小白教程(大白话教学 下篇
  6. 密室鼻祖 深红色房间超详细攻略
  7. jenkins安装github插件后还是找不到 Build when a change is pushed to GitHub
  8. ThreeJS - 修复摄像机近距离模型或者摄像机在某些观察角度3D模型部分或者全部不可见的问题
  9. nginx connect()错误(10061: No connection could be made because the target machine actively refused it)
  10. Python学习笔记 - 探索while无限迭代循环