dataquest是一个不错的网站,里面的课程短小精炼,非常适合初学者快速入门,并建立一个完善的知识体系。
我是在某 宝上买的 月租dataquest, 一个月也才90元, 链接如下: https://item.taobao.com/item.htm?id=564528265057
本文是学习working with api and web scrapy的笔记;
- 网站的API都放在服务器上, 客户端向服务器请求api的时候,服务器会一个JSON数据,在Python中,我们一般使用requests类
- 请求发出后,会返回一个状态码,常见的状态码如下:
200 - 一切都很顺利,服务器返回结果(如果有的话)。
301 - 服务器将您重定向到不同的端点。当公司切换域名或终端名称发生更改时,可能会发生这种情况。
401 - 服务器认为你没有通过身份验证。当你没有发送正确的证书来访问一个API时,会发生这种情况(我们将在后面的任务中讨论这个问题)。
400 - 服务器认为你提出了错误的请求。当您不发送API处理请求所需的信息时,可能会发生这种情况。
403 - 您尝试访问的资源被禁止; 你没有正确的权限来查看它。
404 - 服务器未找到您尝试访问的资源
- 有的API需要传入参数,假如没有传入参数的话,服务器会返回一个400
- 前端传参的方式有两种:
** params传参 ** url 传参
- 后端返回的参数如果是json可以通过两种方式获取:
** request.json() ** json模块 json.loads(string) json.dumps(dict)
- 后端返回了header数据,可以通过reponse.headers获取,是一个字典 比如: headers[‘content-type‘]
import requests import json # response = requests.get("http://api.open-notify.org/iss-now.json") # 需要传入一个参数,参数的是一个字典,字典包含经纬度的数据 params = { ‘lat‘: 29.35, ‘lon‘: 106.33, } # 使用params传参 response = requests.get("http://api.open-notify.org/iss-pass.json", params=params) # 使用url传参 response = requests.get("http://api.open-notify.org/iss-pass.json?lat=29.35&lon=106.33") content = response.content.decode() status_code = response.status_code # 使用dumps的方法获取服务器的json数据为dict # content_dict = json.loads(content) # 使用response.json()直接获取 content_dict = response.json() print(content_dict) # 获取包含该信息是如何生成的和如何解码的信息,也就是headers, Header是一个字典 headers = response.headers print(headers[‘content-type‘])
大多数api不需要验证,但是更多的情况是,访问api需要验证。 API使用 rate limiting, 速率限制。防止请求过快 本文将使用github的API做演练。 -- authorization --access token github使用access token,access token是一个字符串,可以通过官网获取。 我们可以将access token放在header中,传入request请求 -- paginate 有时候,一个请求的信息太多,可能需要花费很多时间。后端一般会使用pagination 这样的话,后台每次只返回一页码的数据而不是全部的数据,那么要访问到所有 的数据, 需要将访问的过程放入到一个for loop里面的 -- post 除了GET 请求外,还有其他的请求 ,比如POST用于发送数据。 github可以使用post请求创建repositories,对于后台是否接受POST请求,需要阅读API文档 POST 成功之后会返回一个201的status_code -- PATCH PATCH: 当你想更改某个对象的某些属性,而不用发送整个对象的时候使用 成功返回200-- PUT PUT 是想更改某个对象的所有信息,我们会发送整个对象的信息 -- DELETE 删除web server端的对象 成功的话返回 204
import requests # 1. header里面添加认证的信息,access token headers = {‘Authorization‘: "token 1f36137fbbe1602f779300dad26e4c1b7fbab631"} response = requests.get("https://api.github.com/users/VikParuchuri/orgs", headers=headers) resp = response.json() print(resp) # 2. 使用paginate 获取不同的页码 params = { ‘per_page‘: 50, ‘page‘: 2 } response = requests.get(‘https://api.github.com/users/VikParuchuri/starred‘, headers=headers, params=params) page2_repos = response.json() # 3. 使用post想web server 发送数据 payload = { "name": "learning-about-apis" } response = requests.post("https://api.github.com/user/repos", json=payload, headers=headers) status_code = response.status_code print(status_code) # 4. 使用patch 请求更改部分信息, put 请求 payload = {"description": "Learning about requests!", "name": "test"} response = requests.patch("https://api.github.com/repos/VikParuchuri/learning-about-apis", json=payload, headers=headers) status = response.status_code print(status) # 5. DELETE请求 response = requests.delete("https://api.github.com/repos/VikParuchuri/test", headers=headers) print(response.status_code) response = requests.delete("https://api.github.com/repos/VikParuchuri/learning-about-apis", headers=headers) status = response.status_code
原文地址:https://www.cnblogs.com/birdflyinhigh/p/8666665.html
时间: 2024-11-05 12:28:52