全国历史天气查询/历史天气预报查询——全国各月份数据爬取

3 篇文章 6 订阅
订阅专栏

全国历史天气查询/历史天气预报查询——全国各月份数据爬取

效果

图1 目标爬取数据
图2 最终实验效果

实验效果:最终可将官网已有的数据进行爬取整理,共363个城市,从2011年1月——至今

数据已上传至CSDN,若无C币的小伙伴可以自行爬取或至QQ群:782589269,群文件中免费下载使用

目录

  • 全国历史天气查询/历史天气预报查询——全国各月份数据爬取
  • 效果
  • 导入所需库
  • 分析官网HTML内容
  • 使用正则抽取所需的城市名信息
  • 爬取全部的城市名与链接
  • 保存城市名与基链接
  • 各城市的月份数据爬取


全国历史天气查询_历史天气预报查询_温度查询_天气后报官网,戳它直达!

导入所需库

import os
import re
import time
import pandas as pd
from tqdm import tqdm
import pickle
import requests

分析官网HTML内容

首先,进行官网HTML内容的分析,找出我们所需信息的代码段
官网链接:http://www.tianqihoubao.com/lishi/

url = "http://www.tianqihoubao.com/lishi/"
url_request = requests.get(url)
url_request.encoding = 'gb2312'
url_text = url_request.text
print(url_text)

在这里插入图片描述
可以看出我们要爬取的城市名在,诸如这样的<a>城市名</a>代码块

<a href="/lishi/bj.htm" title=“北京历史天气预报”><b>北京</b></a>

使用正则抽取所需的城市名信息

若不懂正则表达式,在此,你只需了解在正则表达式中可以用(\w+)来提取所需内容即可
比如对于上例中的链接,将其中的‘北京’换成(\w+)即可,对于各城市相同的部分保持不变,各城市不同的部分使用正则表达式替换,不加括号代表不提取,即\w+
因此,可以得到下述pattern提取公式

url ='<a href="/lishi/beijing.html" title="北京历史天气查询">北京 </a>'
pattern = '<a href="/lishi/(\w+.html)" title="\w+">(\w+) </a>'

实验测试

exapmle_text = '<a href="/lishi/beijing.html" title="北京历史天气查询">北京 </a>'
pattern =  re.compile(r'<a href="/lishi/(\w+.html)" title="\w+">(\w+) </a>') 
example_city = pattern.findall(exapmle_text)
print(example_city)

在这里插入图片描述

爬取全部的城市名与链接

pattern =  re.compile(r'<a href="/lishi/(\w+.html)" title="\w+">(\w+) </a>') 
citys = pattern.findall(url_text) # 获取363个城市名
print("已获取{}个城市名,第一个城市是{},最后一个城市是{}".format(len(citys),citys[0],citys[-1]))

在这里插入图片描述
进行城市各月份链接的爬取,以同样的方法分析其中一个城市的各月份链接地址,如北京
北京2011年1月的链接为
http://www.tianqihoubao.com/lishi/beijing/month/201101.html
北京2011年2月的链接为
http://www.tianqihoubao.com/lishi/beijing/month/201102.html

可以得到如下规律

  • 基地址:http://www.tianqihoubao.com/lishi/
  • 城市地址:beijing/
  • 月份地址:month/201101.html
  • 各个城市的月份链接地址=基地址+城市地址+月份地址

以此规律进行爬取即可?
不可,在笔者尝试N次后,发现必然部分城市数据爬取不全,为什么呢?因为这个网站的HTML语言不是均按照上述规律写的(可能官网的程序员中途换人了,真的太让人头秃了)

实验发现,大约对于同一个城市有大约这样四种神奇的HTML语言格式,在此就是一展你正则表达式的水平的时候了…(写了个爬虫,正则倒是进步了)

exapmle_text = '''
    <li><a href='/lishi/beijing/month/201101.html' title=\"北京2011年01月天气\">2011年1月北京天气</a></li>
    <li><a href='/lishi/beijing/month/201604.html' >2016年4月北京天气</a></li>
    <li><a href='/lishi/beijing/month/201605.html'>2016年5月北京天气</a></li>
    <li><a href='beijing/month/201612.html'>2016年12月北京天气</a></li>
'''

pattern =  re.compile(r"<li><a href='/lishi/(\w+/\w+/\w+.html)'\s?title=\"\w+\">\w+</a></li>|<li><a href='(?:/lishi/)?(\w+/\w+/\w+.html)'\s?>\w+</a></li>") 
pattern.findall(exapmle_text)

在这里插入图片描述

进行城市月份数据的爬取

city_urls = {}
base_url = 'http://www.tianqihoubao.com/lishi/'

for url_city in citys:
    url,city = url_city
    city_base_url = base_url + url
    city_urls[city] = []
    
    pattern =  re.compile(r"<li><a href='/lishi/(\w+/\w+/\w+.html)'\s?title=\"\w+\">\w+</a></li>|<li><a href='(?:/lishi/)?(\w+/\w+/\w+.html)'\s?>\w+</a></li>") 
    city_url_request = requests.get(city_base_url)
    for tuple_ in pattern.findall(city_url_request.text):
        i,j = tuple_
        if i.strip():
            i = base_url + i
            city_urls[city].append(i)
        else:
            j = base_url + j
            city_urls[city].append(j)
    
    
    print('{}:{}份数据'.format(city,len(city_urls[city])))
    print('示例链接:',city_urls[city][0],'\n')

保存城市名与基链接

本地保存后,即使后面实验失败了,也可以从此再次断点重启
通过pickle保存字典

with open("city_urls.file", "wb") as f:
    pickle.dump(city_urls, f)
# 通过pickle读取字典
with open("city_urls.file", "rb") as f:
    city_urls = pickle.load(f)

各城市的月份数据爬取

df:将保存所有数据,以城市列为区分
df_city:将保存各个城市单独的数据
error:不断记录爬取失败的城市与对应链接

df = pd.DataFrame(columns = ['日期', '天气状况', '气温', '风力风向','城市'])
error = []

for city in tqdm(city_urls.keys()):
    df_city = pd.DataFrame(columns = ['日期', '天气状况', '气温', '风力风向','城市'])
    
    if city + '.csv' in os.listdir('./output/'):
        continue
    for month_url in city_urls[city]:
        try:
            dataframe = pd.read_html(month_url,encoding = 'gb2312')[0]
            if dataframe.shape[0] == 0:
                dataframe = pd.DataFrame(columns = ['日期', '天气状况', '气温', '风力风向','城市'])
                dataframe.loc[0,:] = [None,None,None,None,city]
            else:
                dataframe = dataframe.loc[1:,:]
                dataframe.columns = ['日期', '天气状况', '气温', '风力风向']
                dataframe['城市'] = city
            df_city = df_city.append(dataframe)
            df = df.append(dataframe)
        except:
            print('Error')
            print(month_url)
            error.append((city,month_url))
            continue
            
    df_city.to_csv('./output/'+city+'.csv',index=False)   
    print('城市:\t',city,'数据收集完毕')
print('所有城市数据,已收集完成!')   

在这里插入图片描述

python爬取网络历史天气数据
05-24
python爬取网络历史天气数据
历史天气数据
02-08
历史天气数据 抚顺2037355 参考文献
如何查询小时级别的历史气象数据
最新发布
m0_71040069的博客
05-16 439
平台包括地理位置选择板块、气象数据板块、风力发电数据板块、光伏发电数据和光伏项目建议书板块、地理信息板块。平台与美国国家航天局(NASA)、欧洲中期天气预报中心(ECMWF)和德国气象局(DWD)等多家气象数据平台合作并根据自有数据网格对气象数据进行优化融合。以羲和能源气象大数据平台举例说明,平台能够实时下载全球任意单点位置或地域平均统计的历史40年至未来7日预测的11种气象小时级数据,及以此为基准生成的风电、光伏发电功率数据。进行地理位置选择,可选择全球任意单点数据或区域平均数据,也可在地图中手动定位。
气温数据爬虫历史+预报)
Elsie678的博客
09-12 1698
本文示例程序的功能主要是获取湖北省各个地市每日最高温、最低温、风速、风向等数据。包括历史气温数据以及未来40天预报气温数据
10年的天气历史记录.zip
05-29
2011年到2020年全国各地各省市的详细的天气数据资源,详细到每个省,每个市。有时间、天气状况、最高气温、最低气温、风向、风力。
获取历史天气网上城市历史气温数据
热门推荐
ccvin的博客
08-11 2万+
 使用Python自带的标准库获取历史天气网(http://lishi.tianqi.com)上城市的历史气温数据,需要设置的是city名,这个需要历史天气网查看,以及需要获取的年份和月份。 # -*- coding: utf-8 -*- """ @author: CC """ import re import urllib2 import csv import time """ 设置需要...
python爬取一年天气数据
m0_61981943的博客
05-26 2201
因为有些分数问我怎么直接爬取一年的天气,并做数据分析,今天我就来了1.爬取2021年一年的数据首先,我们需要找到一个能够提供天气数据的网站。这里我们选择了中国天气网(导出相应的包2.进行伪装3.抓取一年天气数据4.数据存储在数据存储前,对数据进行处理,便于后期的数据分析。将上面的“当天信息”字段拆分为“日期”和“星期”两个字段,“风向信息”也是如此。最后,将数据保存为csv文件中。
20行代码,爬取各地历史天气数据
hq606的博客
04-02 7505
最近有做工程的朋友,让写一个爬虫获取某城市的历史天气数据。要求不高,主要是希望能代替人工搜索数据,代码总是比较方便。而我作为一个初学者正在练习爬虫的学习。所以代码并不是很漂亮,但是思路还是比较清晰规范的。顺便练习了正则对数据的提取,字符串的切片,pandas的dataframe基本使用。 先看爬取的网页 http://tianqi.2345.com/wea_history/57516.htm 这个...
html查询历史天气,历史天气查询2345,怎样查以前的预报天气
weixin_39814393的博客
06-09 1495
历史天气查询2345,怎样查以前的预报天气以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!怎样查以前的预报天气1、查历史天气可以使用【历史天气查询2345网】,输入,百度一下。然后再点击【2345天气预报】的网址。2、进入到【2345天气预报】网站之后,点击【历史天气】。3、然后就可以看到自己省会城市的最近一段天气情况。...
数据可视化~全国各省天气预报分析.rar
12-09
压缩包内含——jupyter代码、保存的HTML图片、答辩PPT 、Word文档 作品介绍 (源文件),基本期末作业所需的知识点全覆盖。
Python爬虫学习记录(1)——BeautifulSoup爬取天气信息
12-21
Python爬虫学习记录(1)——BeautifulSoup爬取天气信息 上节学习了flask简单使用并且爬取网站,本节学习BeautifulSoup爬取天气信息 打开网站:http://www.weather.com.cn/weather/101030100.shtml 可以看到天津...
基于高德开放平台公交数据爬取与处理——重庆公交数据
12-08
应网友私信需要,上传基于高德开放平台爬取的重庆地区公交站点与路线数据数据包含站点、路线的.csv数据,以及相应的.shp数据
2020中国高校计算机大赛·华为云大数据挑战赛热身赛——python获取深圳历史天气信息!!
12-21
2020中国高校计算机大赛·华为云大数据挑战赛热身赛——python获取深圳历史天气信息!! 不多说了,直接上代码!!!后续会进一步更新如何来处理这一部分的历史天气信息,欢迎大家持续关注哦~ 1.代码 (原本放了个...
Android大作业——天气预报查询APP
12-30
基于Android的天气预报查询软件 1.可以罗列出全国所有的省、市、县。 2.可以查看全国任意城市的天气信息。 3.可以自由地切换城市,去查看其他城市的天气 4.提供手动更新以及后台自动更新天气的功能。 可以根据当前...
中国气象历史数据china1942_2022降水、温度、气压、风速、风向、云量,逐小时部分为逐三小时
无极低码
04-09 1万+
中国历史天气实况数据 NCDC(美国国家气候数据中心,National Climatic Data Center),隶属于NOAA(美国国家海洋及大气管理局,National Oceanic and Atmospheric Administration)。包括中国区域(含港澳台)的。数据,少量站点有1小。
全球范围1929-2022年气象站点的逐日最高气温数据(Shp格式\12000个站点)
weixin_63042008的博客
04-05 372
数据分享】全球范围1929-2022年气象站点的逐日最高气温数据(Shp格式\12000个站点)
60年(1942年)以来中国地面站点气象数据
weixin_44906759的博客
07-20 552
最近收集了我国60对年以来的气象数据,包括:气温、气压、露点、风向、风速、云量、降水量等 。
【开源】分享2011-2015年全国城市历史天气数据库【Sqlite+C#访问程序】
weixin_33905756的博客
09-06 168
    由于个人研究需要,需要采集天气历史数据,前一篇文章:C#+HtmlAgilityPack+XPath带你采集数据(以采集天气数据为例子),介绍了基本的采集思路和核心代码,经过1个星期的采集,历史数据库基本全了,现在开放该数据库,目的是为了让可能需要该类型做相关研究准备的,至于实时天气的采集本项目也做了,暂时不公布,如果有需求的,单独好我联系,原因很简单,人家小站也不容易,大家一起拖,容...
全球历史气候数据分享
03-22 3225
概述 气候,包括温度、湿度、气压、风(包括风向和风速)、降水量、大气成分数及众多其他气象要素在很长时期(一般几十年以上)及特定区域内基于统计数据的综合概括描述;除了天气的“平均”外,还包括了天气的变化和极端情况,以及异常情况的发生,这里为大家分享一下全球的历史气候数据数据介绍 数据的下载网址为:Historical climate data — WorldClim 1 documentation,是1970-2000年的WorldClim 2.1版气候数据,此版本于2020年1月发布。 数据..
Java爬携程_Java数据爬取——爬取携程酒店数据(二)
05-18
在上一篇文章中,我们介绍了如何通过Java代码模拟浏览器行为来爬取携程网站上的酒店列表数据。本篇文章将继续介绍如何通过Java代码获取酒店详情页面的数据。 1. 获取酒店详情页面URL 在上一篇文章中,我们已经可以获取到酒店列表页面的数据。接下来,我们需要从列表页面中获取每个酒店的详情页面URL。我们可以通过以下代码来获取URL: ```java // 获取酒店详情页面URL Elements hotelLinks = doc.select(".hotel_item a[href^=//hotels.ctrip.com/hotel/]"); for (Element link : hotelLinks) { String href = link.attr("href"); hotelUrls.add("http:" + href); } ``` 这里我们使用了Jsoup框架提供的选择器功能,选取class为“hotel_item”的元素,然后再选取其中的a标签,并且href属性值以“//hotels.ctrip.com/hotel/”开头的元素。然后再遍历这些元素,获取其中的href属性值并加上“http:”前缀,即是酒店详情页面的URL。 2. 解析酒店详情页面数据 获取到酒店详情页面的URL后,我们需要再次模拟浏览器行为,访问该URL并获取页面数据。我们可以通过以下代码来实现: ```java // 获取酒店详情页面数据 for (String url : hotelUrls) { Document hotelDoc = Jsoup.connect(url).userAgent(USER_AGENT).get(); String hotelName = hotelDoc.select(".hotel_intro dt").text(); String address = hotelDoc.select(".hotel_address a").text(); String score = hotelDoc.select(".hotel_score .score_num").text(); String commentNum = hotelDoc.select(".hotel_judgement .hotel_judgement_judgement").text(); String price = hotelDoc.select(".hotel_intro .hotel_price span").text(); hotels.add(new Hotel(hotelName, address, score, commentNum, price)); } ``` 这里我们同样使用了Jsoup框架来获取页面数据。首先,我们遍历所有酒店详情页面的URL,然后通过Jsoup.connect()方法连接到该URL并获取页面数据。接着,我们使用选择器选取需要的元素,例如酒店名称、地址、评分、评论数和价格等,并将其保存到一个自定义的Hotel对象中。最后,我们将所有的Hotel对象添加到一个列表中,以便后续的数据处理。 3. 数据保存 获取到所有酒店的数据后,我们可以将其保存到本地文件中,也可以将其保存到数据库中。这里我们使用了JDBC连接MySQL数据库,并将数据保存到一个名为“hotels”的表中。以下是保存数据的代码: ```java // 保存酒店数据数据库 Connection conn = null; PreparedStatement stmt = null; try { Class.forName(JDBC_DRIVER); conn = DriverManager.getConnection(DB_URL, USER, PASS); String sql = "INSERT INTO hotels (name, address, score, comment_num, price) VALUES (?, ?, ?, ?, ?)"; stmt = conn.prepareStatement(sql); for (Hotel hotel : hotels) { stmt.setString(1, hotel.getName()); stmt.setString(2, hotel.getAddress()); stmt.setString(3, hotel.getScore()); stmt.setString(4, hotel.getCommentNum()); stmt.setString(5, hotel.getPrice()); stmt.executeUpdate(); } } catch (SQLException se) { se.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } finally { try { if (stmt != null) stmt.close(); } catch (SQLException se2) { } try { if (conn != null) conn.close(); } catch (SQLException se) { se.printStackTrace(); } } ``` 这里我们使用了JDBC框架来连接数据库,并执行SQL语句将酒店数据保存到数据库中。最后,我们需要在finally块中关闭数据库连接和语句对象,以释放资源。 总结 本篇文章介绍了如何通过Java代码获取携程网站上的酒店详情页面数据,并将其保存到MySQL数据库中。这个过程涉及到了许多技术,例如模拟浏览器行为、页面数据解析、数据库连接等。通过这个案例,我们可以更好地理解Java爬虫的实现原理和技术要点。

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • 计算机系统的层次结构(计算机组成原理5) 29707
  • 补码乘法运算(计算机组成原理18) 25783
  • 【从官方案例学框架Tensorflow/Keras】数字加法seq2seq 22410
  • 【AIML系列-2】人工智能标记语言——初级标签教学 22015
  • 加减运算&溢出判断(计算机组成原理16) 20941

分类专栏

  • 课程向 75篇
  • 论文向 8篇
  • 报错集 4篇
  • 算法 6篇
  • DataWhale 3篇
  • pandas 6篇
  • NLP 1篇
  • AIML语言 4篇
  • 项目向
  • 深度学习框架向 13篇
  • 读书向 5篇
  • 图像分类 1篇
  • 比赛向 9篇
  • 总结向 1篇
  • 爬虫向 3篇
  • 工具向 3篇
  • 科普向 2篇

最新评论

  • 加减运算&溢出判断(计算机组成原理16)

    云野の风: 别的没看,溢出判断那里的图,负数的补码是反码加一,图是错的

  • 全国历史天气查询/历史天气预报查询——全国各月份数据爬取

    jjkkk9: 想问您花了多久时间爬完363个市的所有历史气象数据呀,我这边总是卡,好久才完成一个

  • 全国历史天气查询/历史天气预报查询——全国各月份数据爬取

    jjkkk9: 想问一下中间经常卡住怎么解决呀

  • 全国历史天气查询/历史天气预报查询——全国各月份数据爬取

    jjkkk9: 你好,这个网站 能爬到记录到县的历史其后数据吗

  • 原码除法运算(计算机组成原理19)

    做而论道_CS: 计算机刚诞生时,基本器件是电子管。 CPU (运算器控制器) 是由几个大型机柜组成的。  占地上百平米,耗电多少多少瓦,... 。 在这种条件下,才能说:  CPU 只有加法器,没有减法器;  必须用补码相加,来实现减法运算。 ---------------- 经历了 “晶体管、集成电路、大规模集成电路” 时代, 你还以为计算机【没有减法器】吗? 你的想法,肯定是错的! 用集成电路,做一个减法器,已经是轻而易举了。 现在想做减法,直接就可以做了。 根本就不用 “用补码相加” 了。 你写这些,太落后了。 ---------------- 终于知道我们为什么缺芯片用了。 就是被你们这些 “专家” 耽误了。

您愿意向朋友推荐“博客详情页”吗?

  • 强烈不推荐
  • 不推荐
  • 一般般
  • 推荐
  • 强烈推荐
提交

最新文章

  • 【论文向】文本纠错近年论文汇总
  • 【论文向】NAACL2022 汉语纠错多源、多参考数据集MuCGEC
  • 【算法】剑指 Offer 专项突击版 Day1
2022年13篇
2021年7篇
2020年123篇

目录

目录

评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿芒Aris

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值

聚圣源造梦江湖公司起名用字大全叉车魔兽rgp网上花钱起名可信么网络起名男姓铁男孩起名www.weather.com.cn郑氏起名女生名字大全暗黑2悔恨刀剑神域第24集药材的名字起名我要上大学肖起名字女孩内衣店铺起名水浒无间道演员表iphone7尺寸泰坦尼克号经典台词宁姓 起名雅虎翻译安全软件排名我见默少多有病免费阅读未删版本超级医生媳妇的三国时代足球资讯怎么看淘宝一共花了多少钱奶茶店起名大全宝典梵文翻译宝宝起名比较很好的网站张姓宝宝起名酒店起名淀粉肠小王子日销售额涨超10倍罗斯否认插足凯特王妃婚姻让美丽中国“从细节出发”清明节放假3天调休1天男孩疑遭霸凌 家长讨说法被踢出群国产伟哥去年销售近13亿网友建议重庆地铁不准乘客携带菜筐雅江山火三名扑火人员牺牲系谣言代拍被何赛飞拿着魔杖追着打月嫂回应掌掴婴儿是在赶虫子山西高速一大巴发生事故 已致13死高中生被打伤下体休学 邯郸通报李梦为奥运任务婉拒WNBA邀请19岁小伙救下5人后溺亡 多方发声王树国3次鞠躬告别西交大师生单亲妈妈陷入热恋 14岁儿子报警315晚会后胖东来又人满为患了倪萍分享减重40斤方法王楚钦登顶三项第一今日春分两大学生合买彩票中奖一人不认账张家界的山上“长”满了韩国人?周杰伦一审败诉网易房客欠租失踪 房东直发愁男子持台球杆殴打2名女店员被抓男子被猫抓伤后确诊“猫抓病”“重生之我在北大当嫡校长”槽头肉企业被曝光前生意红火男孩8年未见母亲被告知被遗忘恒大被罚41.75亿到底怎么缴网友洛杉矶偶遇贾玲杨倩无缘巴黎奥运张立群任西安交通大学校长黑马情侣提车了西双版纳热带植物园回应蜉蝣大爆发妈妈回应孩子在校撞护栏坠楼考生莫言也上北大硕士复试名单了韩国首次吊销离岗医生执照奥巴马现身唐宁街 黑色着装引猜测沈阳一轿车冲入人行道致3死2伤阿根廷将发行1万与2万面值的纸币外国人感慨凌晨的中国很安全男子被流浪猫绊倒 投喂者赔24万手机成瘾是影响睡眠质量重要因素春分“立蛋”成功率更高?胖东来员工每周单休无小长假“开封王婆”爆火:促成四五十对专家建议不必谈骨泥色变浙江一高校内汽车冲撞行人 多人受伤许家印被限制高消费

聚圣源 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化