从API获取运营数据

  • 百度Web服务API的Geocoding API

Geocoding API用于提供从地址到经纬度坐标或者从经纬度坐标到地址的转换服务,用户可以发送请求且接受JSON、XML的返回数据。可用于对运营数据中的地址相关信息进行解析,从而获取经纬度信息,这些信息可用于进一步基于地理位置进行解析、展示和分析。

使用前准备:

  1. 获取百度账户
  2. 注册成为百度开放平台开发者
  3. 注册完成后,邮件激活账户
  4. 点击“申请密钥”进入创建应用界面,在应用创建中,使用Geocoding API v2,其他服务根据实际需求勾选。IP白名单区域不做限制,则置为“0.0.0.0/0”。
  5. 获得AK密钥。
  6. JSON格式数据需要用requests库,pip3 install requests 安装

代码:

import requests

add = ‘北京市中关村软件园’ # 定义地址

ak = ‘自己申请的ak密钥’ # 创建访问应用时获得的AK

url = 'http://api.map.baidu.com/geocoder/v2/?address=%s&output=json&ak=%s'  # 请求URL

res = requests.get(url % (add, ak))  # 获得返回请求

add_info = res.text  # 返回文本信息

print (add_info)  # 打印输出

打印结果:

status:返回结果状态,成功则返回0

location:经纬度坐标,lat是纬度,lng是经度

precise:未知的附加信息,决定是否精确查找,1为精确查找,0为不精确查找

confidence:可信度,描述打点准确性

level:百度定义的地址类型

‘’’

# json处理

import json  # 导入库

add_json = json.loads(add_info)  # 加载Json字符串对象

lat_lng = add_json['result']['location']  # 获得经纬度信息

print (lat_lng)  # 打印输出对应key的value
  • 获取并解析XML数据

Geocoding API 也提供XML格式的返回数据。可以用python默认和第三方常用库包括xml/libxml2/lxml/xpath等。我们用python自带的XML进行处理。

代码:

#获取并解析xml数据

import requests  # 导入库

add = '北京市中关村软件园'  # 定义地址

ak = '自己申请的ak密钥'  # 创建访问应用时获得的AK

url = 'http://api.map.baidu.com/geocoder/v2/?address=%s&output=xml&ak=%s'  # 请求URL

res = requests.get(url % (add, ak))  # 获得返回请求

add_info = res.text  # 返回文本信息

print (add_info)  # 打印输出

# json处理 python3 默认用utf8编码,就不转换了

import os
import sys
import importlib
importlib.reload(sys)
import xml.etree.ElementTree as Etree  # 导入xml中的ElementTree方法

root = Etree.fromstring(add_info)  # 获得xml的根节点
lng = root[1][0][0].text  # 获得lng数据
lat = root[1][0][1].text  # 获得lat数据
print ('lng: %s' % lng)  # 格式化打印输出
print ('lat: %s' % lat)  # 格式化打印输出
  • 从网页中爬取运营数据

从网页中爬取数据,可以使用python内置标准库或者第三方库,如urllib、urllib2、httplib、httplib2、requests等,这里用requests获取网页数据:

代码:

import requests  # 导入库

url = 'http://www.baidu.com/'  # 定义要抓取的网页地址
res = requests.get(url)  # 获得返回请求
html = res.text  # 返回文本信息
print (html)  # 打印输出网页源代码
  • 获取非结构化文本数据

一般用文本打开读取方式获取,readlines相关函数即可,可看之前文章。

  • 读取图像

常用两个库:PIL和Opencv。使用后者较好。

  1. PIL读取,新版安装pip3 install pillow

Python Imaging Library包含很多库,常用是Image,通过其中的open函数打开图像。

from PIL import Image  #导入库

file = '1.jpg'  #打开文件
img = Image.open(file,'r') #打开图像方式
img.show()  #展示图像
img_gray = img.convert('L') #设置图像为灰度模式
img_gray.show() #展示图像
  1. 用Opencv读取图像
#!/usr/bin/python3
import cv2
file = '20200330212059.jpg' 
img = cv2.imread(file)   #读取图像
cv2.imshow('image',img) #展示图像
cv2.waitKey(0) #与现实参数配合使用

waitKey()方法是键盘绑定函数,参数为等待的毫秒数,如果为0,表示无限期等待知道键盘有输入。

除了使用OpenCV自带的图像展示方法之外,OpenCv还经常和Matplotlib配合展示图像。


读取视频数据

import cv2  # 导入库

cap = cv2.VideoCapture("tree.avi")  # 获得视频对象
status = cap.isOpened()  # 判断文件知否正确打开
if status:  # 如果正确打开,则获得视频的属性信息
    frame_width = cap.get(3)  # 获得帧宽度
    frame_height = cap.get(4)  # 获得帧高度
    frame_count = cap.get(7)  # 获得总帧数
    frame_fps = cap.get(5)  # 获得帧速率
    print ('frame width: ', frame_width)  # 打印输出
    print ('frame height: ', frame_height)  # 打印输出
    print ('frame count: ', frame_count)  # 打印输出
    print ('frame fps: ', frame_fps)  # 打印输出
success, frame = cap.read()  # 读取视频第一帧
while success:  # 如果读取状态为True
    cv2.imshow('vidoe frame', frame)  # 展示帧图像
    success, frame = cap.read()  # 获取下一帧
    k = cv2.waitKey(1000 // int(frame_fps))  # 每次帧播放延迟一定时间,同时等待输入指令
    if k == 27:  # 如果等待期间检测到按键ESC
        break  # 退出循环
cv2.destroyAllWindows()  # 关闭所有窗口
cap.release()  # 释放视频文件对象

cv2.VideoCapture(VIdeoCapture ID|filename|apiPreference)获取视频对象,返回一个对象实例, 参数

VIdeoCapture ID:必填,int类型,系统分配的设备对象的ID,默认 0;

filename:必填,字符串类型,包括:视频文件名称/序列图像/视频URL地址

apiPreference:int类型,后台使用API。

返回对象可以使用get(int)函数获取视频对象的图像属性。

视频对象用read()函数获取视频的一个帧对象frame,调用cv2.imshow()函数展示帧图像。快速展示帧图像,可以得到类似动画效果(一秒至少16帧)。

读取语音数据

import json  # 用来转换JSON字符串
import base64  # 用来做语音文件的Base64编码
import requests  # 用来发送服务器请求

# 获得token
API_Key = '自己申请应用的密钥'  # 从申请应用的key信息中获得
Secret_Key = '应用的key获取'  # 从申请应用的key信息中获得
token_url = "https://openapi.baidu.com/oauth/2.0/token?grant_type=client_credentials&client_id=%s&client_secret=%s"  # 获得token的地址
res = requests.get(token_url % (API_Key, Secret_Key))  # 发送请求
res_text = res.text  # 获得请求中的文字信息
token = json.loads(res_text)['access_token']  # 提取token信息

# 定义要发送的语音
voice_file = 'baidu_voice_test.pcm'  # 要识别的语音文件
voice_fn = open(voice_file, 'rb')  # 以二进制的方式打开文件
org_voice_data = voice_fn.read()  # 读取文件内容
org_voice_len = len(org_voice_data)  # 获得文件长度
base64_voice_data = base64.b64encode(org_voice_data)  # 将语音内容转换为base64编码格式

# 发送信息
# 定义要发送的数据主体信息
from MyEncoder import MyEncoder
headers = {'content-type': 'application/json'}  # 定义header信息
payload = {
    "format": "pcm",  # 以具体要识别的语音扩展名为准
    "rate": 8000,  # 支持8000或16000两种采样率
    "channel": 1,  # 固定值,单声道
    "token": token,  # 上述获取的token
    "cuid": "B8-76-3F-41-3E-2B",  # 本机的MAC地址或设备唯一识别标志
    "len": org_voice_len,  # 上述获取的原始文件内容长度
    "speech": base64_voice_data  # 转码后的语音数据
}
data = json.dumps(payload,cls=MyEncoder,indent=4)  # 将数据转换为JSON格式
vop_url = 'http://vop.baidu.com/server_api'  # 语音识别的API
voice_res = requests.post(vop_url, data=data, headers=headers)  # 发送语音识别请求
api_data = voice_res.text  # 获得语音识别文字返回结果
text_data = json.loads(api_data)['result']
print (api_data)  # 打印输出整体返回结果
print (text_data)  # 打印输出语音识别的文字

四部分:

1、导入需要的库信息。

2、获取百度语音识别API的token信息。

3、获取和处理语音文件数据。

4、发送请求获取语音识别的结果。

注意,语音音频源是有要求的,支持的格式、采样率、位深、声道等。

语音数据的应用方向:

1、语音转文字;2、语音识别;3、语音语义理解;4、语音合成;5、应用集成。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值