使用Python爬虫获取城市天气信息(包括历史天气数据)

使用python爬取历史天气数据

文章目录

    • 使用Python爬虫获取城市天气信息(包括历史天气数据)
  • 一、准备工作
  • 二、完整代码
    • 更新

一、准备工作

python环境3.6.7,需要用到的库主要有re,BeautifulSoup,requests以及pandas(用于保存数据)

分析目标网站的源码,部分源码如图:

可以看到,所有数据都被封装在class为thrui的标签下,所以我们可以使用bs解析数据后使用find_all函数找到thrui标签,部分代码如下:

html=get_page(url,headers)
bs=BeautifulSoup(html,'html.parser')
data=bs.find_all(class_='thrui')

取得数据后以列表形式返回,使用re库findall函数分离数据,具体步骤不再赘述。

二、完整代码

完整代码如下:

import requests
import re
import time
from bs4 import BeautifulSoup
import pandas as pdurl='http://lishi.tianqi.com/mianyang/201906.html'
headers={'User-Agent':'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36','Cookie':'lianjia_uuid=9d3277d3-58e4-440e-bade-5069cb5203a4; UM_distinctid=16ba37f7160390-05f17711c11c3e-454c0b2b-100200-16ba37f716618b; _smt_uid=5d176c66.5119839a; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%2216ba37f7a942a6-0671dfdde0398a-454c0b2b-1049088-16ba37f7a95409%22%2C%22%24device_id%22%3A%2216ba37f7a942a6-0671dfdde0398a-454c0b2b-1049088-16ba37f7a95409%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E7%9B%B4%E6%8E%A5%E6%B5%81%E9%87%8F%22%2C%22%24latest_referrer%22%3A%22%22%2C%22%24latest_referrer_host%22%3A%22%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC_%E7%9B%B4%E6%8E%A5%E6%89%93%E5%BC%80%22%7D%7D; _ga=GA1.2.1772719071.1561816174; Hm_lvt_9152f8221cb6243a53c83b956842be8a=1561822858; _jzqa=1.2532744094467475000.1561816167.1561822858.1561870561.3; CNZZDATA1253477573=987273979-1561811144-%7C1561865554; CNZZDATA1254525948=879163647-1561815364-%7C1561869382; CNZZDATA1255633284=1986996647-1561812900-%7C1561866923; CNZZDATA1255604082=891570058-1561813905-%7C1561866148; _qzja=1.1577983579.1561816168942.1561822857520.1561870561449.1561870561449.1561870847908.0.0.0.7.3; select_city=110000; lianjia_ssid=4e1fa281-1ebf-e1c1-ac56-32b3ec83f7ca; srcid=eyJ0Ijoie1wiZGF0YVwiOlwiMzQ2MDU5ZTQ0OWY4N2RiOTE4NjQ5YmQ0ZGRlMDAyZmFhODZmNjI1ZDQyNWU0OGQ3MjE3Yzk5NzFiYTY4ODM4ZThiZDNhZjliNGU4ODM4M2M3ODZhNDNiNjM1NzMzNjQ4ODY3MWVhMWFmNzFjMDVmMDY4NWMyMTM3MjIxYjBmYzhkYWE1MzIyNzFlOGMyOWFiYmQwZjBjYjcyNmIwOWEwYTNlMTY2MDI1NjkyOTBkNjQ1ZDkwNGM5ZDhkYTIyODU0ZmQzZjhjODhlNGQ1NGRkZTA0ZTBlZDFiNmIxOTE2YmU1NTIxNzhhMGQ3Yzk0ZjQ4NDBlZWI0YjlhYzFiYmJlZjJlNDQ5MDdlNzcxMzAwMmM1ODBlZDJkNmIwZmY0NDAwYmQxNjNjZDlhNmJkNDk3NGMzOTQxNTdkYjZlMjJkYjAxYjIzNjdmYzhiNzMxZDA1MGJlNjBmNzQxMTZjNDIzNFwiLFwia2V5X2lkXCI6XCIxXCIsXCJzaWduXCI6XCIzMGJlNDJiN1wifSIsInIiOiJodHRwczovL2JqLmxpYW5qaWEuY29tL3p1ZmFuZy9yY28zMS8iLCJvcyI6IndlYiIsInYiOiIwLjEifQ=='}def get_page(url,headers):html=requests.get(url,headers=headers)if html.status_code==200:html.encoding=html.apparent_encodingreturn html.textelse:return Nonedate_box=[]
max_temp=[]
min_temp=[]
weh=[]
wind=[]
week_box=[]html=get_page(url,headers)
bs=BeautifulSoup(html,'html.parser')
data=bs.find_all(class_='thrui')
date=re.compile('class="th200">(.*?)</')
tem=re.compile('class="th140">(.*?)</')
time=re.findall(date,str(data))
for item in time:week=item[10:]week_box.append(week)date_box.append(item[:10])
temp=re.findall(tem, str(data))
for i in range(30):max_temp.append(temp[i*4+0])min_temp.append(temp[i*4+1])weh.append(temp[i*4+2])wind.append(temp[i*4+3])
datas=pd.DataFrame({'日期':date_box,'星期':week_box,'最高温度':max_temp,'最低温度':min_temp,'天气':weh,'风向':wind})
print(datas)

更新

2022年5月30日更新:很多朋友不知道如何循环爬取整年数据,现已做修改,完整代码如下:

import requests
import re
import time
from bs4 import BeautifulSoup
import pandas as pd#url = 'http://lishi.tianqi.com/mianyang/201905.html'
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36','Cookie':'lianjia_uuid=9d3277d3-58e4-440e-bade-5069cb5203a4; UM_distinctid=16ba37f7160390-05f17711c11c3e-454c0b2b-100200-16ba37f716618b; _smt_uid=5d176c66.5119839a; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%2216ba37f7a942a6-0671dfdde0398a-454c0b2b-1049088-16ba37f7a95409%22%2C%22%24device_id%22%3A%2216ba37f7a942a6-0671dfdde0398a-454c0b2b-1049088-16ba37f7a95409%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E7%9B%B4%E6%8E%A5%E6%B5%81%E9%87%8F%22%2C%22%24latest_referrer%22%3A%22%22%2C%22%24latest_referrer_host%22%3A%22%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC_%E7%9B%B4%E6%8E%A5%E6%89%93%E5%BC%80%22%7D%7D; _ga=GA1.2.1772719071.1561816174; Hm_lvt_9152f8221cb6243a53c83b956842be8a=1561822858; _jzqa=1.2532744094467475000.1561816167.1561822858.1561870561.3; CNZZDATA1253477573=987273979-1561811144-%7C1561865554; CNZZDATA1254525948=879163647-1561815364-%7C1561869382; CNZZDATA1255633284=1986996647-1561812900-%7C1561866923; CNZZDATA1255604082=891570058-1561813905-%7C1561866148; _qzja=1.1577983579.1561816168942.1561822857520.1561870561449.1561870561449.1561870847908.0.0.0.7.3; select_city=110000; lianjia_ssid=4e1fa281-1ebf-e1c1-ac56-32b3ec83f7ca; srcid=eyJ0Ijoie1wiZGF0YVwiOlwiMzQ2MDU5ZTQ0OWY4N2RiOTE4NjQ5YmQ0ZGRlMDAyZmFhODZmNjI1ZDQyNWU0OGQ3MjE3Yzk5NzFiYTY4ODM4ZThiZDNhZjliNGU4ODM4M2M3ODZhNDNiNjM1NzMzNjQ4ODY3MWVhMWFmNzFjMDVmMDY4NWMyMTM3MjIxYjBmYzhkYWE1MzIyNzFlOGMyOWFiYmQwZjBjYjcyNmIwOWEwYTNlMTY2MDI1NjkyOTBkNjQ1ZDkwNGM5ZDhkYTIyODU0ZmQzZjhjODhlNGQ1NGRkZTA0ZTBlZDFiNmIxOTE2YmU1NTIxNzhhMGQ3Yzk0ZjQ4NDBlZWI0YjlhYzFiYmJlZjJlNDQ5MDdlNzcxMzAwMmM1ODBlZDJkNmIwZmY0NDAwYmQxNjNjZDlhNmJkNDk3NGMzOTQxNTdkYjZlMjJkYjAxYjIzNjdmYzhiNzMxZDA1MGJlNjBmNzQxMTZjNDIzNFwiLFwia2V5X2lkXCI6XCIxXCIsXCJzaWduXCI6XCIzMGJlNDJiN1wifSIsInIiOiJodHRwczovL2JqLmxpYW5qaWEuY29tL3p1ZmFuZy9yY28zMS8iLCJvcyI6IndlYiIsInYiOiIwLjEifQ=='}def set_link(year):#year参数为需要爬取数据的年份link = []for i in range(1,13):#一年有12个月份if i < 10:url='http://lishi.tianqi.com/mianyang/{}0{}.html'.format(year,i)else:url='http://lishi.tianqi.com/mianyang/{}{}.html'.format(year,i)link.append(url)return linkdef get_page(url,headers):html = requests.get(url,headers=headers)if html.status_code == 200:html.encoding = html.apparent_encodingreturn html.textelse:return Nonedate_box = []
max_temp = []
min_temp = []
weh = []
wind = []
week_box = []def get_data():link = set_link(2019)for url in link:html = get_page(url,headers)bs = BeautifulSoup(html,'html.parser')data = bs.find_all(class_='thrui')date = re.compile('class="th200">(.*?)</')tem = re.compile('class="th140">(.*?)</')time = re.findall(date,str(data))print(time)print(len(time))for item in time:week = item[10:]week_box.append(week)date_box.append(item[:10])temp = re.findall(tem, str(data))for i in range(len(time)):#之前因为自身需要的只是19年6月的天气信息,没有考虑到每个月的天数不一样,现在修改后就没有问题了max_temp.append(temp[i*4+0])min_temp.append(temp[i*4+1])weh.append(temp[i*4+2])wind.append(temp[i*4+3])
get_data()
datas = pd.DataFrame({'日期':date_box,'星期':week_box,'最高温度':max_temp,'最低温度':min_temp,'天气':weh,'风向':wind})
datas.to_csv('D:\天气数据.csv',encoding='utf_8_sig')
print(datas)

如果觉得这篇文章对您有帮助,请点个赞,谢谢哦!

如果需要历史某年完整天气数据,添加循环爬取即可,谢谢大家支持,如有错误,还请斧正。

使用python爬取天气信息(包括历史天气数据)相关推荐

  1. Python爬取高德地图各城市天气

    Python爬取高德地图各城市天气 爬虫练习项目之一.从高德地图json数据接口获取天气.可以获取某省的所有城市天气.高德地图的这个接口还能获取县城的天气,我只写到了市.有兴趣的朋友可以尝试一下. 完 ...

  2. 利用python爬取丁香医生上新型肺炎数据,并下载到本地,附带经纬度信息

    新增:国外疫情网站介绍 已更新:爬取国外疫情数据 已更新:新型肺炎历史数据下载 2020年3月27日补充: 制作了一个全球肺炎数据查询下载网站,效果如下: 访问地址:http://119.3.227. ...

  3. python爬取电脑本地数据_利用python爬取丁香医生上新型肺炎数据,并下载到本地,附带经纬度信息...

    原标题:利用python爬取丁香医生上新型肺炎数据,并下载到本地,附带经纬度信息 新型肺炎肆虐全国,可以预知,最近一两年地理学中会有一部分论文研究新型肺炎的空间分布及与其他指标的关联分析.获取其患病人 ...

  4. python爬取机票信息

    python爬取机票信息 飞机和高铁列车不同,在同样的航线中有着不同的票价,借此我们希望获取尽量多的机票信息来分析机票的变化规律. 首先我们选取京东机票为爬取对象http://jipiao.jd.co ...

  5. Python 爬取网页信息并保存到本地爬虫爬取网页第一步【简单易懂,注释超级全,代码可以直接运行】

    Python 爬取网页信息并保存到本地[简单易懂,代码可以直接运行] 功能:给出一个关键词,根据关键词爬取程序,这是爬虫爬取网页的第一步 步骤: 1.确定url 2.确定请求头 3.发送请求 4.写入 ...

  6. python爬取控制台信息_python爬虫实战之爬取智联职位信息和博客文章信息

    1.python爬取招聘信息 简单爬取智联招聘职位信息 # !/usr/bin/env python # -*-coding:utf-8-*- """ @Author  ...

  7. Python爬取售房信息并保存至CSV文件

    Python爬取售房信息并保存至CSV文件 在上一篇文章: Python爬取租房信息并保存至Excel文件,介绍了如何使用Python爬取租房信息并保存至Excel文件,在本案例中则是使用Python ...

  8. python爬取网页信息

    最近在学习python,发现通过python爬取网页信息确实方便,以前用C++写了个简单的爬虫,爬取指定网页的信息,代码随便一写都几百行,而要用python完成相同的工作,代码量相当少.前几天看到了一 ...

  9. python爬取路况信息查询_如何一键获取高德交通态势数据

    发送原创文章至admin@caup.net,可申请注册邀请码 您需要 登录 才可以下载或查看,没有帐号?注册方式 x W56N8WNYzvv0Yeow.jpg (86.04 KB, 下载次数: 25) ...

  10. Python爬取王者荣耀英雄的皮肤数据并下载皮肤图片项目

    Python爬取王者荣耀英雄的皮肤数据,并下载皮肤图片!高清的图片用来做桌面也不错哟~ 网址:https://pvp.qq.com/web201605/herolist.shtml 1.获得英雄信息, ...

最新文章

  1. 转换前台javascript传递过来的时间字符串到.net的DateTime
  2. PE学习(一)masm32开发环境和ollyICE使用
  3. Linux代理后网页显示问题,项目部署到linux后出现的两个问题
  4. Hibernate5环境搭建
  5. 在硒中按TagName定位元素
  6. loadrunner / socket level data and wininet level data
  7. Dependency Walker使用说明[转]
  8. grpc java 泛型_gRPC中Any类型的使用(Java和NodeJs端)
  9. matlab在振动信号处理中的应用_激光测振仪在超声变幅杆振动测试中的应用
  10. 衰退的爱立信,进击的华为
  11. jenkins linux虚拟机,Jenkins实战演练之Linux节点任务配置
  12. 别再杀他们祭天了!1024程序员日那些不得不吐槽的点
  13. NB-IOT相关的术语 SGW、PGW、LTE、RRC、E-UTRAN、EPC
  14. android使用ContentProvider初始化sdk,初始化时机
  15. 最详细的golang + 私库(gitlab gitee) 模块开发 这一篇文章解决所有问题
  16. displayTag使用总结
  17. 明天是程序员节,程序员的过节姿势大全抢先看
  18. 华为2017年9月校招芯片类面试经验
  19. ssh mysql jsp码头船只出行及配套货柜码放管理系统的设计与实现+论文+开题报告+任务书
  20. NC17889 新建 Microsoft Office Word 文档

热门文章

  1. echarts图表宽度为百分比出现的问题
  2. 服务搭建篇(七) Elasticsearch单节点部署以及多节点集群部署
  3. 09年第一次团队活动感想
  4. Jquery中的ajax请求($.ajax())参数请求详解
  5. python高级编程
  6. 简单谱子C语言程序,c语言曲谱_单片机c语言音乐简谱代码
  7. PPT的一些技巧和工具
  8. linux pppoe优化性能,基于Linux内核模式的PPPoE优化与实现.pdf
  9. 移动安全--45--MobSF-v3.0源代码分析(一)
  10. 功率因数(PF)与总谐波失真(THD)在原理层面上的关系