示例接口为和风天气的天气预报,该网站为个人开发者提供免费的预报数据(有访问次数限制)。
注册地址:http://console.heweather.com
注册后在控制台可以看到个人认证的key(密钥),这个key是访问API的钥匙。
文档地址:https://dev.heweather.com/docs/api/weather
免费版接口地址:https://free-api.heweather.net/s6/weather/{weather-type}?{parameters}
可以看出这里有两个参数:
(1):{weather-type}
代表不同的天气数据类型,必选,请使用以下值替代:
weather-type值 | 描述 | 授权 |
---|---|---|
now | 实况天气 | 商业/免费 |
forecast | 3-10天预报 | 商业/免费 |
hourly | 逐小时预报 | 商业/免费 |
lifestyle | 生活指数 | 商业/免费 |
(2):{parameters}
代表请求参数,包括必选和可选参数。所有请求参数均使用 &进行分隔,参数值存在中文或特殊字符的情况,需要对参数进行 url encode。
请求参数:
参数 | 描述 | 选择 | 示例值 |
---|---|---|---|
location | 需要查询的城市或地区,可以输入以下值:1.城市ID。2.经纬度格式:经度,纬度(经度在前纬度灾后,英文,分隔,十进制格式,卑微东经为正,南纬西经为负)3.城市名称,支持中英文和汉语拼音4.城市名称,上级城市或省或国家,英文,分隔,此方式可以字啊重名的情况下只获取想要的地区的天气数据,例如 西安,陕西 5.IP 6.根据请求自动判断,根据用户的请求获取IP,通过IP定位并获取城市数据 | 必选 | 1.location=CN101010100 2.LOCATION=116.40,39.9 3.location=北京、location=北京市、location=beijing 4.location=朝阳,北京、location=chaoyang,beijing 5.location=60.194.130.1 6.location=auto_ip |
lang | 多语言,可以不使用该参数,默认为简体中文,海外城市默认为英文 | 可选 | lang=en |
unit | 单位选择,公制(m)或英制(i),默认为公制单位 | 可选 | unit=i |
key | 用户认证key,支持数字签名方式进行认证 | 必选 | key=xxxxxxxxxxxxxxxx |
根据API,组合接口地址:
实况天气:
https://free-api.heweather.net/s6/weather/now?location=chongqing&key=daea278878a9498298ce1d125a81562e
3-10天天气预报:
https://free-api.heweather.net/s6/weather/forecast?location=chongqing&key=daea278878a9498298ce1d125a81562e
只要编写代码访问接口地址,就可以返回数据。服务器返回的数据是JSON格式的数据,也就是Python中的字典。
通过预读城市代码内容,可以知道API提供了3240个城市的天气预报。
城市代码可以拷贝到本地文件,也可以通过requests.get()直接从网上获取。https://a.hecdn.net/download/dev/china-city-list.csv
从网上读取数据的第一步是获取城市列表,然后根据城市列表循环,代码如下:
import requests
url = 'https://a.hecdn.net/download/dev/china-city-list.csv'
strhtml = requests.get(url)
data = strhtml.text
data1 = data.split("\n")
for i in range(3):
data1.remove(data1[0])
for item in data1:
print(item[0:11])
完成了城市编码提取后,下一步就是调用接口获取数据,代码如下:
import requests
import time
url = 'https://a.hecdn.net/download/dev/china-city-list.csv'
strhtml = requests.get(url)
data = strhtml.text
data1 = data.split("\n")
for i in range(3):
data1.remove(data1[0])
for item in data1:
url = 'https://free-api.heweather.net/s6/weather/forecast?location=' + item[0:11] + '&key=daea278878a9498298ce1d125a81562e'
strhtml = requests.get(url)
time.sleep(1)
print(strhtml.text)
数据以JSON格式返回,每一个城市/地区都是一个JSON
如果要将返回的JSON数据解析出来,可以使用for循环语句。
import requests
import time
url = 'https://a.hecdn.net/download/dev/china-city-list.csv'
strhtml = requests.get(url)
data = strhtml.text
data1 = data.split("\n")
for i in range(3):
data1.remove(data1[0])
for item in data1:
url = 'https://free-api.heweather.net/s6/weather/forecast?location=' + item[0:11] + '&key=daea278878a9498298ce1d125a81562e'
strhtml = requests.get(url)
time.sleep(1)
dic = strhtml.json()
for item in dic["HeWeather6"][0]["daily_forecast"]:
print(item["tmp"]["max"])
使用JSON在线结构化工具观察数据结构,网址如下:
http://www.json.org.cn/tools/JSONEditorOnline/index.htm
通过观察路径,3天的预报数据是在[HeWeather6][0][daily_forecast]
下面,由[0]、[1]和[2]这3个数据节点分别存放3天的数据,而每天的最高温度是在[HeWeather6][0][daily_forecast][n][tmp][max]路径下,其中[n]表示分节点[0]、[1]、[2]。
requests库返回的数据可以编码成JSON格式的数据,只有JSON对象才可以使用上面分析的路径,表现方式如下:
strhtml.json()
mongoDB是一个基于分布式文件存储的数据库,由C++编写,皆在为web应用提供可扩展的高性能数据存储解决方案。
mongoDB是一个介于关系数据库和非关系数据库之间的产品,它在非关系数据库中功能最丰富、最像关系数据库。
一直执行Next下一步,当进入这个界面的时候,下面的√一定要去掉,不然会安装的特别的慢,如果不去掉,可能要等几个小时以上
环境变量配置:将MongoDB的bin目录加入环境变量中。
2. 配置本地MongoDB
创建数据库文件的存放位置
在你data的目录下,创建一个db文件 如:G:\mongodb\data\db
因为启动mongodb服务之前需要必须创建数据库文件的存放文件夹,否则命令不会自动创建,而且不能启动成功
启动MongoDB服务
打开cmd命令行,进入安装目录的bin目录中,输入如下命令启动MongoDB,mongod --dbpath g:\mongodb\data\db
在浏览器输入http://localhost:27017,如果在浏览器中出现下面一段英文说明成功了
输入: mongod -dbpath “g:\mongodb\data\db” -logpath “g:\mongodb\data\log\mongo.log” -install -serviceName “MongoDB”
在PyCharm中的菜单,依次选择“File”→“settings”→“plugins”选择marketplace,在搜索框中输入mongo,然后选择Monogo Plugin,选择安装,安装好后重启P有Charm,就可以在右侧看到Mongo Explorer.
在Mongo Servers设置窗口中单击左侧加号按钮(addServer)
输入连接名,然后单击“Test Connection”(测试连接)按钮,提示信息为“Connection test successful”时表示连接正常,然后单击OK按钮,保存设置即可。
为python安装mongo库支持pymongo
pip install pymongo
import requests
# 加载pymongo库
import pymongo
import time
# 建立连接
client = pymongo.MongoClient('localhost', 27017)
# 在MongoDB中新建名为weather的数据库
book_weather = client['weather']
# 在weater库中新建名为sheet_weather_3的表
sheet_weather = book_weather['sheet_weather_3']
url = 'https://a.hecdn.net/download/dev/china-city-list.csv'
strhtml = requests.get(url)
data = strhtml.text
data1 = data.split("\n")
for i in range(3):
data1.remove(data1[0])
for item in data1:
url = 'https://free-api.heweather.net/s6/weather/forecast?location=' + item[
0:11] + '&key=daea278878a9498298ce1d125a81562e'
strhtml = requests.get(url)
time.sleep(1)
dic = strhtml.json()
# 向表写入一条数据
sheet_weather.insert_one(dic)
# for item in dic["HeWeather6"][0]["daily_forecast"]:
# print(item["tmp"]["max"])
基于3.3节的结果,查询重庆的天气数据,代码如下:
import pymongo
client = pymongo.MongoClient('localhost', 27017)
book_weather = client['weather']
sheet_weather = book_weather['sheet_weather_3']
# 查找键HeWeather6.basic.city值为重庆的数据
for item in sheet_weather.find({'HeWeather6.basic.location': '重庆'}):
print(item)
接下来查询天气最低气温大于5摄氏度的城市名,代码如下:
import pymongo
client = pymongo.MongoClient('localhost', 27017)
book_weather = client['weather']
sheet_weather = book_weather['sheet_weather_3']
for item in sheet_weather.find():
# 因为数据需要3天的天气预报,因此循环3次
for i in range(3):
tmp = item['HeWeather6'][0]['daily_forecast'][i]['tmp_min']
# 使用update方法,将表中最低气温数据修改为数值型
sheet_weather.update_one({'_id': item['_id']}, {
'$set': {
'HeWeather6.0.daily_forecast.{}.tmp_min'.format(i): int(tmp)
}
})
# 提取出最低气温低于5摄氏度的城市
for item in sheet_weather.find(
{'HeWeather6.daily_forecast.tmp_min': {
'$gt': 5
}}):
print(item['HeWeather6'][0]['basic']['location'])
这里第一个参数是{'_id': item['_id']}
,表示要更新的查询条件,对应_id字段。
第二个参数表示要更新的信息,$set
是MongoDB中的一个修改器,用于指定一个键并更新键值,若键不存在则创建一个键。
除此之外,常用修改器还有 i n c 、 inc、 inc、unset、$push等。
代码中 l t 、 lt、 lt、lte、 g t 和 gt和 gt和gte,分别表示符号<、<=、>和>=