dataquest学习笔记之 python web scrawl 之working with api

Posted birdflyinhigh

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了dataquest学习笔记之 python web scrawl 之working with api相关的知识,希望对你有一定的参考价值。

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

  




 

 





































以上是关于dataquest学习笔记之 python web scrawl 之working with api的主要内容,如果未能解决你的问题,请参考以下文章

Python Web学习笔记之WebSocket原理说明

Python Web学习笔记之SSL,TLS,HTTPS

Python Web学习笔记之TCP/IP协议原理与介绍

Python Web学习笔记之并发编程的孤儿进程与僵尸进程

python web服务器学习笔记 并发尝试之popen原理探究

Python学习----第七模块笔记(Web开发进阶之Django数据库操作)