数据结构论坛

首页 » 分类 » 常识 » Python快速爬虫某地数年气候数据,P
TUhjnbcbe - 2023/8/26 18:42:00
用爬取的气候数据作为Logo的毛玻璃底图

01爬虫开展步骤:文末会附上所有源代码

前言:编程里面有句常用语:不要再造轮子。本文在参考了(GitHub:piess)大神基础上,对内容进行了升级,对细节和疑点进行了剖析,以供大家相互学习进步。环境搭建:Windows系统Anaconda3软件内置的Jupyternotebook平台环境;爬取网站:天气预报;爬取信息:广西梧州市—四年气候数据;分析目标:网站url与js文件结构;批量下载:批量下载爬取数据;数据处理:对返回数据进行分析加工,得到目标数据;存储数据:对数据存储本地端并对数据进行挖掘;

02环境搭建

Windows系统Anaconda3软件内置的Jupyternotebook平台环境,对新手来说是很适合学习Python和开展爬虫的一个智能高效交互平台,具体见下方介绍:

python循环结构的forin和while的区别

03爬取网站

天气预报页面分析(见框)

在历史天气中,提供了最近十年的每天天气信息,包含温度、降雨条件和风向等信息,红框位置可以切换目标地区,本文以广西梧州为案例,左上角红框内显示url地址标识为‘’,这个识别码是地区识别码,切换历史年份和时间均不改变。

为目标地区梧州的识别码

04分析目标

目标url已经确定,下一步是分析js文件,也就是存储在页面中显示的每月天气信息源文件js。

每一个页面是单独js月份气候数据

2.在网页上按f12,切换到Network,刷新网页或者切换年月,即可出来js的url

很不幸,网站已经做了js加密无法从左侧name列查看js名字和js的url

3.解决方法:

利用老版本爬虫经验,如图测试js连接:

js虽然做了加密,但是源文件js是一样的

自己添加网址/t/wea_history/js//_.js

格式如下图所示:

格式:年月(如:)/标识码_年月

05下面开始操作爬取数据

构造待爬取的年月列表

从01到12共计四年?

也许大家会问,为什么不做10年的,因为超过四年是没办法请求url,等一下给大家说。关于append()函数的使用,可以见下方链接:

Python中利用append()函数使用,Python生成多年年月数列

2.构造待爬取的JS的URL列表

用到确定循环需要使用for-in

#源代码,因为平台审核,自己需要对着上图补全信息

cxj_urls=[

f自己补全信息,如上图/t/wea_history/js/{month}/_{month}.js

formonthinmonths

]

cxj_urls

3.批量下载数据

成功调取了批量数据并展示第一个js

提醒:

若年份设置过多,比如开始到共计十年的话,十有八九会发生请求失败,跳转到这一行,如图下,本人测试了四年没问题。

十年没办法返回status_code为

源代码:

importrequests#输入请求函数

datas=[]自定义数组变量

forurlincxj_urls:

r=requests.get(url)

ifr.status_code!=:#请求代码若等于即成功,不等于的话转到raise

raiseException()

#去除javascript前后的字符串,得到一个js格式的JSON

data=r.text.lstrip(varweather_str=).rstrip(;)#去除js文件中的开头和符号

datas.append(data)#数据列存储

datas[0]#测试第一个js文件,也就是01的js文件内容

06开始分析和处理爬取到的批量数据

1.因为第五步接受下载的数据并不是标准的js文件,需要用到一个demjson模块进行处理,因为本案例用anaconda3内置的Jupyter,直接在激活板块输入:pipinstalldemjson,回车即可下载并加载demjson模块包。见图下

下载并加载demjson模块包

2.载入demjson函数并处理数据:见图

第三方库解码javascript数据

3.提取上图tqInfo[]列表数据,见图下

提取上图tqInfo[]列表数据

4.解析所有四年数据的数据

demjson模块包会自行分析tqInfos[]内的每天天气数据,用{}包起来部分,如图上红框所示,注意,末尾有一个空的天,此时用len(x)0进行剔除,若不剔除,最后在结果文件中进行日期排序后也可以剔除空数据。

分析所有四年数据并计算总行数

07处理完的数据写入csv文件

1.测试第一个all_datas[0]文件,并提取里面列关键字:

展示第一组数据并提取关键字

2.保存数据为csv文件,其中注意的是数据格式为utf-8格式,非ansi格式,所以可以巧妙利用第三小步解决这个问题,不然Excel打开会产生乱码。

忽略报错,直接去目录下看Jupyter平台默认目录下

3.excel打开csv文件

除了日期外全部乱码

此时记事本打开csv文件点击另保存,切换格式为ANSI后保存(注意保存格式还是.csv,别改成txt),如图下

编码改成ansi,且还是存为csv文件

4.此时excel打开即可正常显示了

做表等可以替换删除了℃等变成值

08源代码与实战教材推荐

利用获取的数据做了一个每日温差图背景

网络爬虫需要对需求和目标网址js和url和数据结构等了解,但是对初学者而言,可以通过实战开始,从简单的开始,提高学习的积极性和信心,Python3和2有很多代码差异,学东西一定要用新的,推荐下面这本实战数据,蜘蛛动物世界,图灵出品必须精品。

Python3网络爬虫开发实战(图灵出品)京东月销量好评率99%无理由退换京东配送官方店¥99购买

09代码(注意换行和缩减,在Python3的中缩减很重要)

#构造数年年月列表

months=[]

foryearinrange(,,1):

formonthinrange(0,12):

months.append(%d%02d%(year+1,month+1))

months

to_urls=[

f自己补全网址.

1
查看完整版本: Python快速爬虫某地数年气候数据,P