三月内容-API实例入门

三月的内容,programming这个部分按计划是写python和API的主题。

〇、写在前面

最近Facebook关于API开源泄露了5kw用户的数据使其亏损严重。我也是仔细看了好多相关的分析。正好这个月的也利用工作之余研究了一些API的东西。在此写一篇短小的记录。感觉入门起来有点难,因为很多是网页上的基础知识,再加上很多都要注册付费以获取密码,本章没有自己写出东西来,都是研究别人写好的代码,做一些简单的总结。

一、什么是API?

API是应用编程接口applicationprogramming interface。一般来说,大型公司都会提供一个API为使用者和开发者提供便利。有的免费,有的收费。

二、基础准备-JSON库

调用API服务器返回的是JSON格式的数据。可以通过python自带的JSON库进行解析。

JSON库可以将JSON数据转换为字典,JSON数组转换成列表,从而方便操作。

三、API的用法

可以通过公司发布的API接口说明进行操作。基本能在大网站里公布API的都会有应用实例。

(不是所有API的接口都可以用在python中)

在使用中,常常需要key,有些是免费的,有些是付费的。其实花点钱对我来说没什么,主要是我发现几个大的网站API都要实名认证,还要24H。我实在是不想做。

而且书中公布的几个API都已经下架了,造成了很大学习难度。我索性就从网上找到了两个比较入门的API实例进行学习。

四、实例讲解。

本章的学习真的对我来说痛苦,没有web的知识。官方书里的API内容已经在API商店里下架了。本来想学两个实例后自己做一个大型的项目,然而学了两个实例我已经不行了——基础知识还不够。一句句学都还是有几句看不懂的,更别说自己写了。

所以这次的文章,我就引用两位前辈公开的代码,和数据爬取结果。一句句解析翻译,其中有些由于版本(py2和py3),网站自身源代码有变动,所以本人做了一些蹩脚的小修改。

最后结果为1是一个豆瓣图书信息的爬取程序。

2是一个网站的用户地理位置信息的爬取+BDP地理经纬图绘制。

(本文非商业用途,只为学习者参考交流

感谢两位公布代码的前辈:1CSDNBlog作者MTbaby;2简书作者:橄榄的世界);

案例一:

利用豆瓣API查询豆瓣书籍信息。(最入门的)

准备基础:API地址:'https://api.douban.com/v2/book/'

解析代码:

# #coding:utf-8

#编码方式是utf-8

importjson

importurllib

importrequests

#引用3个库

foriinrange(1220564,1220580):

#i的循环,方便之后构造URL。

#url地址

url='https://api.douban.com/v2/book/'

#api的url百度

values=str(i)

#将参数转化为字符串,方便组装url

url=url+values

#进行参数封装

response=urllib.request.urlopen(url)

#访问网页

#json解析:

html=json.loads(response.read().decode('utf-8'))

#打印所需数据,这里python3print的打印方法是括号。

print('书名:',html['title'])

print(html['author'])

print('出版日期:',html['pubdate'])

print('概述:',html['summary'])

print('价格:',html['price'])

print('xxxx')

#分隔符

i=i+1

#循环

结果图是:

实例2:

研究糗事百科网站首页人的地理信息,并用热力图进行表示。

代码以及每行的解释:

importrequests

fromlxmlimportetree

importjson

importcsv

importtime

#引用几个库

defget_url(url): #定义函数

r=requests.get(url,headers=headers) #请求网页,加入表头

print(r.status_code) #写下状态代码200,其实没必要

html=etree.HTML(r.text) #利用xptah解析网页文本内容

url_infos=html.xpath('//div[@class="author clearfix"]')#循环的大层次

user_link_list= [] #用户连接的列表

forurl_infoinurl_infos: #循环用户信息

user_part_link=url_info.xpath('a[1]/@href')#可以加一个print,来查看具体调出来的iurl#--结果是:user_number:

实际这一行爬出来的是我黄色圈出来的部分。仔细看一下用户的信息URL就是在网站后+users/number。 因此这是构造下一级网页的关键。

print(user_part_link) #打印一下爬的内容,我用来学习代码

iflen(user_part_link)!=: #介绍一下!是反向逻辑操作。,因此,也可以去掉后if len() = 1

user_part_link=user_part_link[] #这两行是构造下一级菜单的函数

user_link="https://www.qiushibaike.com"+user_part_link

user_link_list.append(user_link) #添加到列表中

else:

pass #否则pass

returnuser_link_list #返回列表

defget_address(url): #定义地址函数

r=requests.get(user_link,headers=headers) #请求链接+报头

print(r.status_code) #可以省略,200

html=etree.HTML(r.text)

ifhtml.xpath('//div[2]/div[3]/div[2]/ul/li[4]/text()'): #xpath爬取用户信息

address=html.xpath('//div[2]/div[3]/div[2]/ul/li[4]/text()')[].split('· ')[]

get_geo(address)

else:

pass

defget_geo(address):

par={'address':address,'key':'cb649a25c1f81c1451adbeca73623251'}

url='http://restapi.amap.com/v3/geocode/geo'

r=requests.get(url, par)

#API调用过程

json_data=json.loads(r.text) #Json解析数据

try:

geo=json_data['geocodes'][]['location'] #解析并获取一下地理信息数据

longtitude=geo.split(',')[]#经度 #分割经纬度

latitude=geo.split(',')[1]#纬度

writer.writerow((address, longtitude, latitude)) #写入CSV文件

# print(address,longtitude,latitude)

exceptIndexError: #出现错误就pass

pass

if__name__=="__main__": #主程序入口

f=open('F://map7.csv','w',newline='') #打开存储位置

writer=csv.writer(f) #写入存储位置的csv文件

writer.writerow(('地址','经度','纬度')) #文件里表头

headers={

'user-agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3294.6 Safari/537.36'}

url_list= ["https://www.qiushibaike.com/text/page/{}/".format(i)foriinrange(1,30)] #表头和URL链接

forurlinurl_list: #定义循环

user_link_list=get_url(url)

foruser_linkinuser_link_list:

address=get_address(user_link)

f.close()

程序运行的结果是csv文件,记录了用户的地理信息。此处由于我流量有限,爬取了只有几十行的信息。结果图如下:

第二步,我要通过一个叫BDP的数据可视化工具,在地图上显示。

BDP是一个数据分析可视化软件,在线使用,制图功能还挺强的,有各种demo可以用。

打开BDP工具,在工作表中创建经纬图。然后添加进去csv文件。如图:

然后进入作图界面,将地址的csv文件拖入地图,即可生成结果。我生成了一个热力图。

主要内容使爬取网站第一页中的作者地理位置分布。

不足在于:我在单位使用手机流量给电脑热点爬取的,所以数据量挺少的。如果有多一点的数据,可以更清晰的看到一些分布情况。

热力图输出结果:

本月作者继续忙碌,毕业论文,复习,驾照,实习,上课。数据分析是个人爱好和研究生将学的方向。

下个月准备在计算机学习上的时间一半用来继续研究API,再研究两个用python写API的实例,另一半时间进入数据库的学习。

  • 发表于:
  • 原文链接:http://kuaibao.qq.com/s/20180321G16RIA00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

同媒体快讯

扫码关注云+社区

领取腾讯云代金券