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的url3.解决方法:
利用老版本爬虫经验,如图测试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自己补全网址.