当前,有许多政府或企事业单位会在网上为公众提供相关的公开数据。以 http://api.help.bj.cn/api/均 .cn/api /网站为例,打开这个链接,大家可以看到多种可供调用的数据 。
进入 http://api.help.bj.cn/api/网站,单击“空气质量 API ” 。

我们可以看到其中提供的数据格式为 JSON 格式
通过上图所示的接口地址,
apis/ aqilist/ 。 其中数据结构如下 : 可知保存该数据的 完整链接为 http://api.help.bj.cn/api/?id=56
数据格式如下:

from bs4 import BeautifulSoup
import sqlite3,ast,hashlib,os,requests conn = sqlite3.connect('E:\\DataBasePM25.sqlite') # 建立数据库连接
cursor = conn.cursor() # 建立 cursor 对象
# 建立一个数据表
sqlstr='''
CREATE TABLE IF NOT EXISTS TablePM25 ("no" INTEGER PRIMARY KEY AUTOINCREMENT
NOT NULL UNIQUE ,"SiteName" TEXT NOT NULL ,"PM25" INTEGER)
'''
cursor.execute(sqlstr)
http://api.help.bj.cn/apis/aqilist/

url = "http://api.help.bj.cn/apis/aqilist/"
html=requests.get(url).text.encode('utf-8-sig') # 读取网页原始码
# 判断网页是否更新
md5 = hashlib.md5(html).hexdigest()
old_md5 = ""
if os.path.exists('F:\\pythonBase\\pythonex\\ch06\\old_md5-.txt'):
with open('F:\\pythonBase\\pythonex\\ch06\\old_md5-.txt', 'r') as f:
old_md5 = f.read()
with open('F:\\pythonBase\\pythonex\\ch06\\old_md5-.txt', 'w') as f:
f.write(md5)
print("old_md5="+old_md5+";"+"md5="+md5) #显示新老md5码进行观察

if md5 != old_md5:
print('数据已更新...')
sp=BeautifulSoup(html,'html.parser') #解析网页内容
jsondata = ast.literal_eval(sp.text) #此时jscondata取到的是字典类型数据
# 删除数据表内容
js1=jsondata.get("aqidata") #取出字典数据中的aqidata项的值(值是列表)
conn.execute("delete from TablePM25")
conn.commit()
n=1
for city in js1: #city此时是列表js1中的第一条字典数据
CityName=city["city"] #取出city字典数据中的值为"city"的key
if(city["pm2_5"]==""):
PM25=0
else:
PM25=int(city["pm2_5"])
# PM25=0 if city["pm2_5"] == "" else int(city["pm2_5"]) #如果city字典中的key对应的value为空,则PM25=0,否则,把PM25=value
print("城市:{} PM2.5={}".format(CityName,PM25)) #显示城市对应的名称与PM2.5值
# 新增一笔记录
sqlstr="insert into TablePM25 values({},'{}',{})" .format(n,CityName,PM25)
cursor.execute(sqlstr)
n+=1
conn.commit() # 主动更新
else:
print('数据未更新,从数据库读取...')
cursor=conn.execute("select * from TablePM25")
rows=cursor.fetchall()
for row in rows:
print("城市:{} PM2.5={}".format(row[1],row[2])) conn.close() # 关闭数据库连

最新文章

  1. python中引入包的时候报错AttributeError: module 'sys' has no attribute 'setdefaultencoding'解决方法?
  2. AMD加载器实现笔记(四)
  3. 4、CC2541芯片中级教程-OSAL操作系统(简单AT指令实现+IIC软件和硬件实现驱动MPU6050)
  4. OVER(PARTITION BY)函数用法
  5. JQuery特效分享网站
  6. log4net将日志进行分类,保存到不同的目录当中
  7. Oracle生成千万测试数据
  8. eclipse如何修改dynamic web module version
  9. 兼容sdk7&iOS7的issue解决小片段总结
  10. ios中addtarget
  11. delphi 操作 word
  12. 解决安装 Visual Studio 2012 后无法连接VPN的问题
  13. 香蕉派路由功Openwrt、Android功耗对照測试
  14. jQuery replaceWith replaceAll end的用法
  15. Java+大数据开发——Hadoop集群环境搭建(二)
  16. 51 nod 1421 最大MOD值
  17. Unique-paths (动态规划)
  18. C++——volatile关键字的学习
  19. CSS外边距属性,深入理解margin
  20. 企业数据总线(ESB)和注册服务管理(dubbo)的区别

热门文章

  1. Delphi流的操作_文件合并
  2. python之路(dingo 框架)
  3. ZOJ 1454 dp
  4. 题解 P1082 【同余方程】
  5. this深度面试题2
  6. 多线程下,两个线程交替打印0 -100,使用wait()和notify()
  7. 深入分析Java反射(七)-简述反射调用的底层实现
  8. springboot的配置文件说明
  9. i++ 和 ++i 的区别和实现
  10. PAT Advanced 1134 Vertex Cover (25) [hash散列]