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

  


 

原文地址:https://www.cnblogs.com/birdflyinhigh/p/8666665.html

时间: 2024-11-05 12:28:52

dataquest学习笔记之 python web scrawl 之working with api的相关文章

python学习笔记2—python文件类型、变量、数值、字符串、元组、列表、字典

python学习笔记2--python文件类型.变量.数值.字符串.元组.列表.字典 一.Python文件类型 1.源代码 python源代码文件以.py为扩展名,由pyton程序解释,不需要编译 [[email protected] day01]# vim 1.py #!/usr/bin/python        print 'hello world!' [[email protected] day01]# python 1.py hello world! 2.字节代码 Python源码文件

ZMAN的学习笔记之Python篇:装饰器

年前工作事务比较繁琐,我只能用零碎的时间继续学习Python,决定开一个系列的博文,作为自己深入学习Python的记录吧.名字也取好了,就叫<ZMAN的学习笔记之Python篇>~开篇是关于装饰器的,春节假期码的字哈哈~就让我们开始吧! 本文的例子都是自己想的,如果不是很合适,请大家提出宝贵意见哈~谢谢啦! 一.为什么要用“装饰器” 比如我们写了如下一段代码: # 打印0~99 def func(): for i in range(100): print(i) 我们想要监测执行这个函数花费了多

PHP学习笔记-PHP与Web页面的交互2

转载请标明出处: http://blog.csdn.net/hai_qing_xu_kong/article/details/51761308 本文出自:[顾林海的博客] 前言 在<PHP学习笔记-PHP与Web页面的交互1>笔记中讲解了form表单的一些属性,包括它的输入域标记.选择域标记和文字域标记的写法,接下来的内容就是讲如何获取表单数据以及PHP数据的传递,包括对各种控件值的获取. 插入表单 提交表单之前一定得有表单,当我们的表单创建完毕后可以将表单插入Web页中,代码如下: <

python 学习笔记 7 -- Python关键字总结

0.写在前面的话 学习一门语言最重要的功课是练习与复习,在<笨方法学Python>中第三十七节虽然没有教你任何内容,但是它提醒我们:"学了这么多,你还能记得多少?该复习了!" 下面我们就对这一节的第一部分"关键字"来做个复习: Python中的关键字包括如下: and       del        from      not      while    as        elif       global    or       with     

ZMAN的学习笔记之Python篇:命令行解析

ZMAN的学习笔记之Python篇: 1.装饰器 2.函数“可变长参数” 3.命令行解析 注:本文全原创,作者:ZMAN  (http://www.cnblogs.com/zmanone/) 在Python中,对命令行的解析方式不唯一,本文将介绍两种方法:一种是用sys.argv手动设置,另一种是用argparse模块. 一.sys.argv是什么 首先看一个例子: import sys print(len(sys.argv)) for arg in sys.argv: print(arg) 将

ZMAN的学习笔记之Python篇:函数可变长参数

ZMAN的学习笔记之Python篇: 1.装饰器 2.函数“可变长参数” 这次来聊聊Python中函数的“可变长参数”,在实际中经常会用到哦~  一.什么是“可变长参数” “可变长参数”就是向一个函数传入不定个数的参数.比如我写一个函数:传入一个学生参加各科目考试的成绩,求平均分,如两个学生分别传入(92, 91, 88)和(88, 95),因为每个学生参加的考试个数不同,因此传入的参数个数也就不同了,遇到这种情况,我们在定义函数的时候,可以使用“可变长参数”. 二.在定义函数时使用“可变长参数

python学习笔记十五 web框架

python Web程序 众所周知,对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. Python的WEB框架分为两类: 自己写socket,自己处理请求 基于wsgi(Web Server Gateway Interface WEB服务网关接口,实现socket功能),自己处理请求 如图示: 自己写的web框架 #!/usr/bin/env python #coding:utf-8 import socket def handle_req

【学习笔记】移动Web手册(PPK力作)

又是好久没写博客了,最近把近半年的总结,全部总结到博客园吧.先写最近的一个移动端的学习笔记.毕竟移动端开发了一段时间,就写一写度<移动web手册>中,对我感触比较深的几个点—— 一.浏览器相关 1. 浏览器的类型——内置浏览器.可下载浏览器.代理浏览器以及webview.这里的代理浏览器是指服务端进行对页面的渲染,把结果发送给客户端进行显示,比较少见. 2. 内置浏览器的升级——大多数内置浏览器都被紧密集成到底层的操作系统中,也就是说,无法单独升级浏览器.因此,为了得到新的Safary版本,你

Python学习笔记-实现探测Web服务质量

pycurl是一个用C语言写的libcurl Python实现,功能非常强大,支持的操作协议后FTP.HTTP.HTTPS.TELNET等,可以理解成Linux下curl命令功能的Python封装,简单易用 本例通过调用pycurl提供的方法,实现探测Web服务质量的情况,比如响应HTTP状态码.请求延时.HTTP头信息.下载速度等,利用这些信息可以定位服务响应慢的具体环节. pycurl.Curl()类实现创建一个libcurl包的Curl句柄对象,无参数. close()方法,对应的libc