的数据库API调用API的经验分享

优采云 发布时间: 2021-05-03 03:07

  的数据库API调用API的经验分享

  内容

  背景

  许多Internet公司通常都有存储自己的用户信息的数据库,而数据库中的数据基本上是由工程部门非常干净地解析的(使用采集器技术或对基础数据的分析主要是开发部门或数据采集工程部工作),因此许多业务数据分析人员仅使用HSQL和其他工具即可轻松获取所需的大量数据。

  但是市场上有一些。他们不像B2C公司那样依靠自己的用户信息来进行产品迭代或业务增长。他们主要依靠工程部门解析第三方数据,并将结果发送给产品开发部门以构建和可视化业务平台。获取第三方数据的过程要求使用第三方API接口,这就是为什么这些公司要求申请多个职位的候选人具有调用API的经验,因为即使公司拥有自己的数据库,它也是所有工程部门。在选择性地对结果进行爬网和排序之后,您可能会面临数据库没有所需数据的困境。目前,您需要使用类似的方法来使用自己的采集数据。

  

  API简介

  调用API的过程也是一种爬虫。在抓取工具中,通常会在两个地方提到API,一个是库API,另一个是数据API。

  库API

  库API通常意味着开发人员已经开发了一个库(例如python库)并为用户提供了调用该库的接口。就像,我们要去包裹储物柜取走我们的快递。我们必须输入正确的信息才能表达我们的意思。此信息是一个API接口,可帮助我们准确定位该库并进行调用。

  数据API

  在产品开发或Web开发中,数据API就像一条从后端传递到前端的数据线。后端人员已经整理出他们想要显示的数据,只需要通过此数据线将其传输给前端开发人员,前端就可以根据需要对其进行可视化处理。而且该界面也可以被外界使用。

  与网络采集器不同,数据API的设计更简单,更高效。此界面已经存储了您需要的数据,因此我们无需花费太多精力来解析网页。网页数据爬网经常给服务器带来压力。如果您的代码未设置合理的类似于人类的Web浏览频率,则存在IP被阻止的风险。

  但是数据API也有一些缺点。尽管市场上有许多可以由外界使用的API产品,但是许多免费接口对爬网量有很大的限制。如果您的抓取需求很大,则需要付费。

  简单的API采集器示例

  下面,我将使用Facebook Graph API抓取数据作为大致记录通用数据API调用过程的示例。

  调用界面信息:提供API调用地址(通常为URL格式)。此地址类似于帮助我们找到要领取的储物柜的行和列。请求获取数据:使用HTTP协议请求传输数据,通常在python的请求包中调用get函数。设置请求参数:您需要提供请求参数,也就是说,您需要告诉API接口要获取的信息类型。例如,在此示例中,我需要created_time(博客发布时间),post_id(博客post_id)和其他信息。 Facebook Graph API简介文件

  尽管get函数可以帮助我们实现HTTP协议请求,但多次请求此URL需要身份验证。例如,以下代码将报告错误:

  import requests

r = requests.get('https://facebook.com/user_id')

r.json()

  并返回:需要身份许可。因此,在使用任何API接口时,最好事先阅读网站使用文档,以了解请求协议需要哪些特定信息。

  {'documentation_url': ''https://facebook.com/user_id/#get-the-access-token',

'message': 'Requires authentication'}

  它也可以在Facebook API的官方用户手册中看到。如果要获取Facebook帐户的发帖信息,则需要获取该帐户的令牌。如果您想获取自己以外的帐户信息,则还需要提前获取他们的令牌。将会有相应的获取令牌的介绍->如何获取Facebook帐户的访问令牌。

  获取令牌后,测试以上代码以获取以下结果:

  

  代码示例

  目的:要获得从202 0. 0 3. 01到202 0. 0 3. 07的每个视频博客帖子的观看次数,请查看每个国家/地区的观看时间,性别和年龄段某个帐户,分析本周博客作者的视频内容的效果。

  1. 首先我需要拿到3.1至3.7之间每条博文的ID(post_id)

2. 筛选出仅为视频的博文ID

3. 需要获取每条视频博文的观看次数,各个国家的观看时长

4. 将json格式的数据整理成dataframe格式

5. 将观看时长可视化

  1.导入所需的软件包

  import pandas as pd

import json, datetime, requests

from datetime import date, timedelta, datetime

import numpy as np

from pandas.core.frame import DataFrame

  2.创建用于抓取数据的函数

<p>def get_list_of_fb_post_ids(fb_page_id, fb_token, START, END):

&#39;&#39;&#39;

Function to get all the post_ids from a given facebook page during certain time range

&#39;&#39;&#39;

posts=[] #用来存储所有博文的post_id

graph_output = requests.get(&#39;https://graph.facebook.com/&#39;+fb_page_id+&#39;?fields=posts.limit(10){created_time}&#39;,params=fb_token).json()

posts+=graph_output[&#39;posts&#39;][&#39;data&#39;]

graph_output = requests.get(graph_output[&#39;posts&#39;][&#39;paging&#39;][&#39;next&#39;]).json()

posts+=graph_output[&#39;data&#39;]

while True: #一直读取next_page,直到某次读取的记录的时间小于你设置的开始时间

try:

graph_output = requests.get(graph_output[&#39;paging&#39;][&#39;next&#39;]).json()

posts+=graph_output[&#39;data&#39;]

if graph_output[&#39;data&#39;][-1][&#39;created_time&#39;]=START)&(df_posts.created_time

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线