一、python怎么获取需要登陆的接口的数据
1、使用Python做爬虫是很广泛的应用场景,那就涉及到了Python是如何获取接口数据的呢?Python拥有很多很强大的类库,使用urllib即可轻松获取接口返回的数据。
2、工具原料Python开发工具url接口,用于请求获取数据
3、首先新建一个py文件,导入所需的类库,urllib,json等。
4、声明api的url地址,和构造请求头。
5、使用urlopen方法发起请求并获取返回的数据。
6、最后就是对返回字符串的处理了。比如字符串的截取,字符串的转换成json对象,转换成字段,再获取对应key的值。
7、使用Python3实现HTTP get方法。使用聚合数据的应用编程接口,你可以调用小发猫AI写作API。这是一个免费的应用程序接口,先上代码,详细说明写在后面:
8、if __name__=='__main__':
9、 Post_url="http://api-ok.xiaofamao.com/api.php?json=0&v=1&key=xxxxxx"#自己想办法弄到key
10、'wenzhang':'床前明月光,疑是地上霜。'
11、 Text= se.post(Post_url, data=Post_data).text.replace("'",'"').replace('/','/')
12、首先,什么是原料药?应用编程接口的全称也称为应用编程接口。它简称为应用编程接口。当我第一次接触接口调用时,我不知道写什么,因为我看了整个项目。这个项目是由龙卷风写的。看了半天龙卷风后,我发现我走错了方向。我只是直接看着界面,因为没有人告诉我项目的整个过程。我不得不强迫自己去看它。我所要做的就是找到程序的主入口,然后根据函数一步一步地调用它。
13、当我编写接口时,因为我必须配合后台编写和浏览器访问,每次访问只需要传入相应的参数来调用相应的接口。界面可以由他人编写,也可以由合作公司提供。当然,合作公司提供的不是免费的。现在基本上,如果我不访问它一次,它只收费几美分。当你听到这些,不要低估这几分。有时候如果你打了几百万次电话,会花很多钱。有些人认为,我们不能按月付款吗?对不起,我不知道。总之,我们一个接一个地计算,因为第一次,我认为我买的那些直接买了我们想要的所有数据,把它们保存在本地数据库中,当我使用它们时,直接从我自己的数据库中转移它们。后来,我发现我想得太多了,伪原创API。
14、该接口调用由python的请求库访问,它基本上是一个get或post请求。有些接口是加密的,然后我们必须用另一方提供给我们的公钥加密或解密,然后用相应的参数访问。我们想要的数据基本上是在请求后返回的结果中以json格式解析的。因此,在请求之后,我们可以用请求提供的json函数来解析它,然后提取数据以一次访问一个数据。
15、没错,接口调用就是这么简单,但是有了后台编写,我才发现请求库现在有多强大,只要它是http或https,我很高兴我在一周内读完了请求和bs4,我真的不打电话给爬虫工程师,如果我是爬虫的时候不学习请求,你能用scrapy写4=dead来写它吗?Urllib的单词基本上被删除了。如果你有要求,为什么要用这个?
二、如何使用python 开发一个api
使用 Python和 Flask设计 RESTful API
近些年来 REST(REpresentational State Transfer)已经变成了 web services和 web APIs的标配。
在本文中我将向你展示如何简单地使用 Python和 Flask框架来创建一个 RESTful的 web service。
六条设计规范定义了一个 REST系统的特点:
客户端-服务器:客户端和服务器之间隔离,服务器提供服务,客户端进行消费。
无状态:从客户端到服务器的每个请求都必须包含理解请求所必需的信息。换句话说,服务器不会存储客户端上一次请求的信息用来给下一次使用。
可缓存:服务器必须明示客户端请求能否缓存。
分层系统:客户端和服务器之间的通信应该以一种标准的方式,就是中间层代替服务器做出响应的时候,客户端不需要做任何变动。
统一的接口:服务器和客户端的通信方法必须是统一的。
按需编码:服务器可以提供可执行代码或脚本,为客户端在它们的环境中执行。这个约束是唯一一个是可选的。
什么是一个 RESTful的 web service?
REST架构的最初目的是适应万维网的 HTTP协议。
RESTful web services概念的核心就是“资源”。资源可以用URI来表示。客户端使用 HTTP协议定义的方法来发送请求到这些 URIs,当然可能会导致这些被访问的”资源“状态的改变。
=================================================================
GET获取资源的信息 http://example.com/api/orders
GET获取某个特定资源的信息 http://example.com/api/orders/123
POST创建新资源 http://example.com/api/orders
PUT更新资源 http://example.com/api/orders/123
DELETE删除资源 http://example.com/api/orders/123
==================================================================
REST设计不需要特定的数据格式。在请求中数据可以以JSON形式,或者有时候作为 url中查询参数项。
坚持 REST的准则设计一个 web service或者 API的任务就变成一个标识资源被展示出来以及它们是怎样受不同的请求方法影响的练习。
比如说,我们要编写一个待办事项应用程序而且我们想要为它设计一个 web service。要做的第一件事情就是决定用什么样的根 URL来访问该服务。例如,我们可以通过这个来访问:
http://[hostname]/todo/api/v1.0/
在这里我已经决定在 URL中包含应用的名称以及 API的版本号。在 URL中包含应用名称有助于提供一个命名空间以便区分同一系统上的其它服务。在 URL中包含版本号能够帮助以后的更新,如果新版本中存在新的和潜在不兼容的功能,可以不影响依赖于较旧的功能的应用程序。
下一步骤就是选择将由该服务暴露(展示)的资源。这是一个十分简单地应用,我们只有任务,因此在我们待办事项中唯一的资源就是任务。
我们的任务资源将要使用 HTTP方法如下:
=======================================================================================
GET http://[hostname]/todo/api/v1.0/tasks检索任务列表
GET http://[hostname]/todo/api/v1.0/tasks/[task_id]检索某个任务
POST http://[hostname]/todo/api/v1.0/tasks创建新任务
PUT http://[hostname]/todo/api/v1.0/tasks/[task_id]更新任务
DELETE http://[hostname]/todo/api/v1.0/tasks/[task_id]删除任务
=======================================================================================
id:任务的唯一标识符。数字类型。
title:简短的任务描述。字符串类型。
description:具体的任务描述。文本类型。
目前为止关于我们的 web service的设计基本完成。剩下的事情就是实现它!
如果你读过Flask Mega-Tutorial系列,就会知道 Flask是一个简单却十分强大的 Python web框架。
在我们深入研究 web services的细节之前,让我们回顾一下一个普通的 Flask Web应用程序的结构。
我会首先假设你知道 Python在你的平台上工作的基本知识。我将讲解的例子是工作在一个类 Unix操作系统。简而言之,这意味着它们能工作在 Linux,Mac OS X和 Windows(如果你使用Cygwin)。如果你使用 Windows上原生的 Python版本的话,命令会有所不同。
让我们开始在一个虚拟环境上安装 Flask。如果你的系统上没有 virtualenv,你可以从https://pypi.python.org/pypi/virtualenv上下载:
New python executable in flask/bin/python
Installing setuptools............................done.
Installing pip...................done.
既然已经安装了 Flask,现在开始创建一个简单地网页应用,我们把它放在一个叫 app.py的文件中:
return"Hello, World!"if __name__=='__main__':
为了运行这个程序我们必须执行 app.py:
* Running on http://127.0.0.1:5000/
现在你可以启动你的网页浏览器,输入http://localhost:5000看看这个小应用程序的效果。
简单吧?现在我们将这个应用程序转换成我们的 RESTful service!
使用 Python和 Flask实现 RESTful services
使用 Flask构建 web services是十分简单地,比我在Mega-Tutorial中构建的完整的服务端的应用程序要简单地多。
在 Flask中有许多扩展来帮助我们构建 RESTful services,但是在我看来这个任务十分简单,没有必要使用 Flask扩展。
我们 web service的客户端需要添加、删除以及修改任务的服务,因此显然我们需要一种方式来存储任务。最直接的方式就是建立一个小型的数据库,但是数据库并不是本文的主体。学习在 Flask中使用合适的数据库,我强烈建议阅读Mega-Tutorial。
这里我们直接把任务列表存储在内存中,因此这些任务列表只会在 web服务器运行中工作,在结束的时候就失效。这种方式只是适用我们自己开发的 web服务器,不适用于生产环境的 web服务器,这种情况一个合适的数据库的搭建是必须的。
我们现在来实现 web service的第一个入口:
'title': u'Buy groceries',
'description': u'Milk, Cheese, Pizza, Fruit, Tylenol',
'title': u'Learn Python',
'description': u'Need to find a good Python tutorial on the web',
}]@app.route('/todo/api/v1.0/tasks', methods=['GET'])def get_tasks():
return jsonify({'tasks': tasks})if __name__=='__main__':
正如你所见,没有多大的变化。我们创建一个任务的内存数据库,这里无非就是一个字典和数组。数组中的每一个元素都具有上述定义的任务的属性。
取代了首页,我们现在拥有一个 get_tasks的函数,访问的 URI为/todo/api/v1.0/tasks,并且只允许 GET的 HTTP方法。
这个函数的响应不是文本,我们使用 JSON数据格式来响应,Flask的 jsonify函数从我们的数据结构中生成。
使用网页浏览器来测试我们的 web service不是一个最好的注意,因为网页浏览器上不能轻易地模拟所有的 HTTP请求的方法。相反,我们会使用 curl。如果你还没有安装 curl的话,请立即安装它。
通过执行 app.py,启动 web service。接着打开一个新的控制台窗口,运行以下命令:
Content-Type: application/json
Server: Werkzeug/0.8.3 Python/2.7.3
Date: Mon, 20 May 2013 04:53:53 GMT
"description":"Milk, Cheese, Pizza, Fruit, Tylenol",
"description":"Need to find a good Python tutorial on the web",
我们已经成功地调用我们的 RESTful service的一个函数!
现在我们开始编写 GET方法请求我们的任务资源的第二个版本。这是一个用来返回单独一个任务的函数:
task= filter(lambda t: t['id']== task_id, tasks)
return jsonify({'task': task[0]})
第二个函数有些意思。这里我们得到了 URL中任务的 id,接着 Flask把它转换成函数中的 task_id的参数。
我们用这个参数来搜索我们的任务数组。如果我们的数据库中不存在搜索的 id,我们将会返回一个类似 404的错误,根据 HTTP规范的意思是“资源未找到”。
如果我们找到相应的任务,那么我们只需将它用 jsonify打包成 JSON格式并将其发送作为响应,就像我们以前那样处理整个任务集合。
Content-Type: application/json
Server: Werkzeug/0.8.3 Python/2.7.3
Date: Mon, 20 May 2013 05:21:50 GMT
"description":"Need to find a good Python tutorial on the web",
$ curl-i http://localhost:5000/todo/api/v1.0/tasks/3
Server: Werkzeug/0.8.3 Python/2.7.3
Date: Mon, 20 May 2013 05:21:52 GMT
<!DOCTYPE HTML PUBLIC"-//W3C//DTD HTML 3.2 Final//EN">
<title>404 Not Found</title>
<h1>Not Found</h1>
<p>The requested URL was not found on the server.</p><p>If you entered the URL manually please check your spelling and try again.</p>
当我们请求 id#2的资源时候,我们获取到了,但是当我们请求#3的时候返回了 404错误。有关错误奇怪的是返回的是 HTML信息而不是 JSON,这是因为 Flask按照默认方式生成 404响应。由于这是一个 Web service客户端希望我们总是以 JSON格式回应,所以我们需要改善我们的 404错误处理程序:
return make_response(jsonify({'error':'Not found'}), 404)
Content-Type: application/json
Server: Werkzeug/0.8.3 Python/2.7.3
Date: Mon, 20 May 2013 05:36:54 GMT
接下来就是 POST方法,我们用来在我们的任务数据库中插入一个新的任务:
if not request.json or not'title' in request.json:
'id': tasks[-1]['id']+ 1,
'title': request.json['title'],
'description': request.json.get('description',""),
return jsonify({'task': task}), 201
添加一个新的任务也是相当容易地。只有当请求以 JSON格式形式,request.json才会有请求的数据。如果没有数据,或者存在数据但是缺少 title项,我们将会返回 400,这是表示请求无效。
接着我们会创建一个新的任务字典,使用最后一个任务的 id+ 1作为该任务的 id。我们允许 description字段缺失,并且假设 done字段设置成 False。
我们把新的任务添加到我们的任务数组中,并且把新添加的任务和状态 201响应给客户端。
使用如下的 curl命令来测试这个新的函数:
Content-Type: application/json
Server: Werkzeug/0.8.3 Python/2.7.3
Date: Mon, 20 May 2013 05:56:21 GMT
注意:如果你在 Windows上并且运行 Cygwin版本的 curl,上面的命令不会有任何问题。然而,如果你使用原生的 curl,命令会有些不同:
当然在完成这个请求后,我们可以得到任务的更新列表:
Content-Type: application/json
Server: Werkzeug/0.8.3 Python/2.7.3
Date: Mon, 20 May 2013 05:57:44 GMT
"description":"Milk, Cheese, Pizza, Fruit, Tylenol",
"description":"Need to find a good Python tutorial on the web",
task= filter(lambda t: t['id']== task_id, tasks)
if'title' in request.json and type(request.json['title'])!= unicode:
if'description' in request.json and type(request.json['description']) is not unicode:
三、python调用第三方api接口写入数据库
在Python中调用第三方 API接口并将数据写入数据库可分为以下几个步骤:
使用 requests库发送 HTTP请求,并使用 PyMySQL库连接 MySQL数据库。您可以使用以下命令在 Python中安装这两个库:
使用 requests库向第三方 API发送请求,获取到需要存储到数据库的数据。
例如,以下代码通过调用和风天气 API获取天气数据:
r=requests.get('https://api.heweather.net/s6/weather/now?location=beijing&key=your_key')
data= r.json()#将请求的结果转换为JSON格式数据
根据 API返回的数据格式,提取需要存入数据库的字段数据。您可以使用字符串操作或 JsonPath等库来提取数据。
例如,以下代码从 API返回数据中提取出温度(tmp)和湿度(hum)字段的值:
tmp= data['HeWeather6'][0]['now']['tmp']
hum= data['HeWeather6'][0]['now']['hum']
使用 PyMySQL库连接 MySQL数据库。请确保您已经安装 PyMySQL库,并且数据库信息是正确的。
例如,以下代码连接本地 MySQL数据库:
conn=pymysql.connect(host='localhost', user='root', password='123456', db='my_db', charset='utf8mb4')
使用 PyMySQL库将数据写入数据库中。
例如,以下代码将温度和湿度数据插入到 weather表中:
#表名:weather,字段:tmp、hum
sql="INSERT INTO weather(tmp, hum) VALUES(%s,%s)"
cursor.execute(sql,(tmp, hum))
print('数据插入成功!')
print('数据插入失败!', e)
r=requests.get('https://api.heweather.net/s6/weather/now?location=beijing&key=your_key')
#处理 API返回数据,提取温度和湿度
tmp= data['HeWeather6'][0]['now']['tmp']
hum= data['HeWeather6'][0]['now']['hum']
conn= pymysql.connect(host='localhost', user='root', password='123456', db='my_db', charset='utf8mb4')
#表名:weather,字段:tmp、hum
sql="INSERT INTO weather(tmp, hum) VALUES(%s,%s)"
cursor.execute(sql,(tmp, hum))
print('数据插入成功!')
print('数据插入失败!', e)
在本例中,我们假设使用的是 MySQL数据库,当然也可以使用其他类型的数据库,具体操作方式可能会略有不同,但是主要的操作步骤是类似的。
关于python调用api接口的内容到此结束,希望对大家有所帮助。