3联网获得网络天气
使用常用类型和字典进行爬虫案例开发,通过现有的天气数据地址进行数据采集,当然一般接口api地址是爬虫分析出来的,也可以通过购买注册申请获得,本次使用的地址是来源于后者。
作业描述
1. 通过天气api地址,获取某个城市的天气数据
2. 打印温度temp,天气情况description,天气气压pressure
3. 示例:
温度xx,天气情况yy,天气气压zz
编码准备
爬虫使用第三方网络请求库,库的名称为requests,底层是基于urllib库。requests在anaconda3中已经集成过了,所以无需下载安装。很有意思的是在python中有很多不同的库可以完成不同的功能需求,大到大数据人工智能生态圈,小到爬虫领域,这些库可以支持开发者快速开发的需求。一般情况下爬虫本身就是一个数据的ETL(抽取extract、转换transform、加载load)过程,可以简单的拆分为:数据下载、数据提取、数据处理、数据存储等过程。其中每个过程都有不同的库来支持
爬虫过程拆解
下面列出了爬虫和数据清洗过程可能会用到的库,在后面的课程中我们会讲解到,目前大家了解整个流程即可。其实爬虫最难的有2个方面:一个是反爬虫,一个是海量数据处理。一般小规模的爬虫是很简单的。
1. 数据下载
· requests/urllib/wget/grequests/...
2. 数据提取
· re/lxml/json/...
3. 数据处理
· pandas/numpy/mapreduce/spark...
4. 数据存储
· csv/openpyxl/mysql/mongdb...
技术点-网络请求库requests
字典知识点复习-字典数据提取
weatherDict = {"coord":{"lon":120.13,"lat":33.39},"weather":[{"id":801,"main":"Clouds","description":"晴,少云","icon":"02d"}],"base":"stations","main":{"temp":17.78,"feels_like":14.23,"temp_min":17.78,"temp_max":17.78,"pressure":1026,"humidity":29,"sea_level":1026,"grnd_level":1025},"visibility":10000,"wind":{"speed":2.13,"deg":343},"clouds":{"all":14},"dt":1604904444,"sys":{"country":"CN","sunrise":1604874318,"sunset":1604912484},"timezone":28800,"id":1787746,"name":"Yancheng","cod":200}## 打印天气描述信息print(weatherDict['weather'][0]['description'])
数据下载
我们会发现weatherDict就是我们要下载的天气数据就是上面的字典类型的数据,解析的天气数据的话也就没什么难度了。
下面我们看下如何下载weatherDict数据,其实也就是一行代码,先导入requests库然后调用get方法获取网络数据,其实requests.get返回的是一个Respose对象,Response对象里面包含了很多信息,如果网络数据是dict类型的可以直接用json()方法即可获得。注意:在我们python中的dict类型和javascript的json类型是类似的数据格式,只是名称不一样,javascript语言中叫json对象类型。
最后非常重要的一句话是,大家写数据下载代码之前,先要确定你的电脑可以正常上网,然后在浏览器中可以正常打开天气预报的api地址,如果一切正常的话,再进行代码的编写
![277f0c87ef966d6b22d741a4b387aa41.png](https://i-blog.csdnimg.cn/blog_migrate/34e97ac612537ac1b3a57d8a4de85419.jpeg)
## 导入网络请求库import requests# 天气预报api地址url='http://api.openweathermap.org/data/2.5/weather?q=yancheng&mode=json&units=metric&lang=zh_cn&APPID=6a67ed641c0fda8b69715c43518b6996'weatherDict = requests.get(url).json()
打印以下代码,你会发现返回的类型是 requests.models.Response,Response最常用方法和属性有
1. 将网络数据转换成字典类型:response.json()
1. 直接获得网络字符串文件:response.text
1. 如果网络文件是图片/视频等二进制文件:response.content
print(type(requests.get(url)))response = requests.get(url) #Response对象print(response.json())print(response.text)print(response.content)
运行结果中response.content返回的内容带字母b
![e6ff1bd03fade0dab3ecaeaccdeb1f20.png](https://i-blog.csdnimg.cn/blog_migrate/a987591ee8bd71cda7f9a4aa8310e708.jpeg)
最终代码
## 导入网络请求库import requests# 天气预报api地址url='http://api.openweathermap.org/data/2.5/weather?q=yancheng&mode=json&units=metric&lang=zh_cn&APPID=6a67ed641c0fda8b69715c43518b6996'weatherDict = requests.get(url).json()## 打印天气描述信息print(weatherDict['weather'][0]['description'])