Python中requests库的学习方法详解

目录
  • 前言
  • 一 URL,URI和URN
    • 1. URL,URI和URN
    • 2. URL的组成
  • 二 请求组成
    • 1. 请求方法
    • 2. 请求网址
    • 3. 请求头
    • 4. 请求体
  • 三 请求
    • 1. get请求
    • 2. get带请求头headers参数
    • 3. post请求
  • 四 响应
    • 1. 响应状态码
    • 2. 响应头
    • 3. 响应体
  • 总结

前言

好记性不如烂笔头!最近在接口测试,以及爬虫相关,需要用到Python中的requests库,之前用过,但是好久没有用又忘了,这次就把这块的简单整理下(个人笔记使用)

一 URL,URI和URN

1. URL,URI和URN

URI的全称是Uniform Resource Identiferm,即统一资源标识符,它标记了一个资源,比如http://www.baidu.com/ 就代表了一个百度网页。

URL的全称是Uniform Resource Locator,即统一资源定位符,是可以通过给出的路径和文件去找到对应的资源,比如 http://tougao.jb51.net/index.php?c=index&a=login&forward=http%3A%2F%2Ftougao.jb51.net%2F 这个URL就具体定位了一个资源,是可以根据路径去实时找到资源的。

URN的全称是Uniform Resource Name,即统一资源名称;它只命名资源,不指定任何路径去定位资源。

三者关系:URI包含URL,URN,即URL,URN是URI的子集。如果URI是一栋房的话,那URL是某个具体的房间(123号房),URN可以是房里某个东西(凳子),但不知道这个东西(凳子)具体在哪。如下

2. URL的组成

常见URL的组成一般如下,用这个URL做一下分析:http://tougao.jb51.net/index.php?c=index&a=login&forward=http%3A%2F%2Ftougao.jb51.net%2F

1 协议:用于访问资源的协议,如上面用的是https协议进行访问,其它还有http,ftp等协议

2 服务器的主机地址:可以是域名,也可以是IP地址。如上面是域名editor.csdn.net访问

3 端口:服务器设置的访问端口。不过URL地址里一般无端口,因为服务器使用了协议的默认端口,用户通过url访问服务器时,可以省略。如http默认端口是80,https默认端口是443,ftp默认端口是22等。

4 路径:资源存放的路径。一般是域名后的/到?之间的内容,如上就是md

5 参数:具体的查询方式,如上面的URL的参数就是not_checkout=1&articleId=122388528

二 请求组成

请求一般是由客户端向服务器端发起的,由4部分组成:请求方法(Request Method),网站(URL),请求头(Request Headers)和 请求体(Request Body)。下面详细整理下最常见的get请求和post请求。

1. 请求方法

常见的请求方法如下

  • GET:请求页面,数据包含在URL里面
  • POST:大多用于提交表单或者上传文件,数据包含在请求体中
  • HEAD:类似GET请求,不过响应报文没有具体的内容,用于获取报头
  • PUT:用客户端传送的数据取代指定的内容
  • DELETE:请求服务器删除指定的页面
  • CONNECT:把服务器当作跳板,让服务器代替客户端访问其他网页
  • OPTIONS:允许客户端查看服务器的性能
  • TRACE:回显服务器收到的请求,主要用于测试或者诊断

不过我们见到和使用的大多数都是GET和POST请求

2. 请求网址

请求的网址即上面说的URL

3. 请求头

请求头,一般是传送服务器需要的一些附加信息,其中比较重要的就是User-Agent,Referer,Cookie等,常用的请求有说明如下

  • Accept: 请求报头域,用于指定客户端可接受哪些类型的信息
  • Accept-Language: 指定客户端可接受的语言类型
  • Accept-Encoding: 指定客户端可接受的编码
  • Host:用于指定资源主机的IP和端口号,其内容为请求URL的原始服务器或网关的位置
  • Cookie:网站为了辨别用户进行会话跟踪而存储在用户本地的数据,它的主要功能是维持当前访问会话。
  • Referer: 用来标识这个请求是从哪个页面发过来的,服务器可以拿到这一信息并做相应的处理,如做资源统计,防盗链接处理等。
  • User-Agent: 可以是服务器识别客户端使用的操作系统及版本,浏览器及版本信息等。所以在做爬虫时要加上此信息,可以伪装浏览器;不加的话很容易被识别为爬虫。
  • Conten-Type:互联网媒体类型,用来表示具体请求中媒体类型信息;如text/html代表HTML格式,image/gif代表GIF图片,application/json代表JSON类型

4. 请求体

请求体一般POST请求的时候才会有,因为GET请求的信息都在URL里。

三 请求

1. get请求

如果我们要发起一个GET请求,直接调用requests库里的GET方法即可,如下

  • get请求时,请求参数一般放在URL里面,数据可以在URL里面看到
import requests
#get(url)
res = requests.get('http://httpbin.org/get')
print(res.text)

请求网站是 http://httpbin.org/get,它会识别我们发起的是get请求,并返回对应的信息。如下

不过不加请求头的话容易被禁止访问,访问知乎https://www.zhihu.com/ 如下

import requests
#get(url)
res = requests.get('http://httpbin.org/get')
res1 = requests.get('https://www.zhihu.com/')
print(res1.text)

2. get带请求头headers参数

上面看见了,如果我们不构造请求头headers的话,容易被禁止访问,因为浏览器有反爬措施,如下

import requests
#get(url,headers)
res1 = requests.get('https://www.zhihu.com/')
print(res1.text)
for i in res1.request.headers.items():
    print(i)

结果返回403(禁止访问),因为浏览器会通过User-Agent参数了解到我们的电脑系统以及浏览器等信息,上面不带headers时,默认User-Agent为python-requests/2.22.0,这服务器一看就知道是脚本,那肯定就会禁止访问。这时就需要重新构造请求头,伪装成浏览器访问,如下

将上面的user-agent值用代码传送,如下

import requests
#get(url,headers)
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36'
}
res1 = requests.get('https://www.zhihu.com/', headers=headers)
print(res1.status_code)
for i in res1.request.headers.items():
    print(i)

如上,重新构造请求头传了user-agent参数后,请求就成功了,user-agent也是我们传进去的值。

3. post请求

对于post请求,使用requests库发起也是很简单的,如下

import requests
data = {'name': 'anxiaochong', 'age': 24}
res = requests.post('http://httpbin.org/post', data=data)
print(res.status_code)
print(res.text)

对于post请求来说,它的数据在URL里面是看不到的,数据一般存放在请体中,如上,我们发起一个post请求,请求参数是data,当我们请求成功后,它会返回如下信息。

四 响应

当我们发起请求之后,如果一切正常,就会得到相应的响应。我们的最终目的,就是要获取返回的数据,所以对返回的数据进行处理是非常重要的。

1. 响应状态码

状态码能够最基本的判定服务器对请求的响应情况,比如200就是请求成功,301就是重定向,404就是请求资源不存在,500就是服务器错误等,常见的一些如下

200:请求成功,服务器已成功处理请求。

301: 重定向,请求的网页已经移动到新位置

400: 请求错误401: 未授权,请求没有进行身份验证或者验证未通过

403: 禁止访问404:未找到,请求资源不存在500:服务器错误

503:服务器无法使用

python获取响应状态码如下

#获取响应状态码
import requests
data = {'name': 'anxiaochong', 'age': 24}
res = requests.post('http://httpbin.org/post', data=data)
#获取响应状态码
print(res.status_code)

2. 响应头

响应头包含了服务器对请求的一些应答信息,如Server,Content-Type,Set-cookie等信息。如下

  • content-type: 返回数据的类型
  • sever:服务器名称,版本等信息
  • set-cookie: 会话cookie,下次请求需要带上。

3. 响应体

响应信息中最重要的当属响应体了,因为我们想要获取的信息基本都在里面。python的request库也有对应的方法了提取相关信息,如下

import requests
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36',
    'Cookie': '_zap=cdbd7845-adac-4d87-ad39-2c6ce8fddde3; _xsrf=kD16ApICYLVrAfyvuW45BRI6jkdo4NcX; d_c0="ABDfdUZbRhSPTmuW3ExXOv346BuMqQ2oWaI=|1641098931"; __snaker__id=P7yktK5PgsCmILtR; gdxidpyhxdE=r9dW%2F%2BxGfN1iooAQAiODTGfGh8mPnu43T4g3V7PKabUA7zMCUUys%5CWvuLdjQeB5r8MZAtwRAOKJUQgJonmDPkpo6C4CxSXwNAP%2FMUa1p52udf%5Cu5eqEoiM%5C5QlGEMdgp3PwqG5uSMvzKyXA5WjmVejZdMmvaqwy8Y7MT1SrgLpf0hG3Q%3A1641099836676; _9755xjdesxxd_=32; YD00517437729195%3AWM_NI=VXux5u3T%2BJ6a%2FwURu60bvpw8ui4mkL1mk0xGQnAgn4UlLc5lq9n%2Fq4nkL9dYlDDOpT8bbuEZZueOScQMFx9h6t9pFTxKkjpVf74kC5EdQT6WJ0AsLoU%2FtsViMqPMk64rVjE%3D; YD00517437729195%3AWM_NIKE=9ca17ae2e6ffcda170e2e6ee87e9699686839bdc73b2868ea2d54a839f9eaeb62183bb8ca7f839968f008cf92af0fea7c3b92a9688bb99b87ff18ce5abb56beda99bb3f83ef4beba91f634b7b7fc8eea48f3b3a5d1fb4d93b28f88ed4097b48484b868b3e7a2d0f440aeb584dae753b09c8cb0f360fcbeae96c8529aababb0d26993938a99bc64f6acf791c560bc95a58bf35ea6e9fc8cc23f87bc9fb5b55d8af08f94cf6597f1bc94d5638fafa0aeea3ef8ae9a8bc837e2a3; YD00517437729195%3AWM_TID=gBk1e8TwlKhAABAAUBN6rQOGA%2FnBFhk3; l_cap_id="ODdjYzkzYjc3ODRlNGU5ZGFhZGNlODZjNmVhZjUxOTk=|1641098947|5e1742f2cfb1bc51e01c98dc554a343834ceb4fe"; r_cap_id="NWJjZTUwNzI3NTZkNGRlOGE2MDc4NjZhNTljMjQwMTE=|1641098947|34aeb872f7b2def674441346a0be809d4d3f3818"; cap_id="YThjNTkwZTZiMjY5NGNiNWJmOWJkYjQzNDRjMWE5MDA=|1641098947|7f4062306951584cd44180c28bb8a8fe90d732cd"; captcha_session_v2="2|1:0|10:1641099110|18:captcha_session_v2|88:THV2VWV1eWhIZUZTZmsvR1Yyd2hHRGNPcFc5QTc4bWNHNWVabzBDZ3JPZFRtUDltenRWeE1SUEtuVEZwcTBHSg==|258d6e1ea988e9f89e94208600834adba972038afbbb273aacc3849fa44c2cf9"; z_c0=Mi4xR1ZYa0RRQUFBQUFBRU45MVJsdEdGQmNBQUFCaEFsVk5sMzItWWdEc09nbTQzZWhiejkwTGhyZTRadE1WSlVEeXZR|1641099159|763c9639b7d621f1e9a64d0e246cec75292d7277; Hm_lvt_98beee57fd2ef70ccdd5ca52b9740c49=1641098932,1641217361; tst=h; SESSIONID=gMeSnpcPawUbmk3tMHN6I6Uc2xxUTfnKfx4Pj7xHJ4Z; JOID=VVkVA0wgiAleIRrUbidunj5sRpR9QcRsCk9stj5B-V08S3HhGwmh6jgnHdVpii0jv9C3ZZnJsok4l_oqAxMoR7k=; osd=UVoSCkwkiw5XIR7XaS5umj1rT5R5QsNlCktvsTdB_V47QnHlGA6o6jwkGtxpji4kttCzZp7Aso07kPMqBxAvTrk=; NOT_UNREGISTER_WAITING=1; Hm_lpvt_98beee57fd2ef70ccdd5ca52b9740c49=1642866191; KLBRSID=fe0fceb358d671fa6cc33898c8c48b48|1642866207|1642866103'
}
res = requests.get('https://www.zhihu.com/hot', headers=headers)
print("响应状态码:", res.status_code)
print("响应内容: ", res.text)
print("获取的响应内容类型: ", type(res.text))
print("响应头信息: ", res.headers)
print("获取请求头信息: ", res.request.headers)
print("获取请求体: ", res.request.body)
print("获取cookie: ", res.cookies)
print("cookie类型: ", type(res.cookies))
print("获取编码格式: ", res.encoding)
print("获取请求URL: ", res.url)

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注我们的更多内容!

(0)

相关推荐

  • python爬虫---requests库的用法详解

    requests是python实现的简单易用的HTTP库,使用起来比urllib简洁很多 因为是第三方库,所以使用前需要cmd安装 pip install requests 安装完成后import一下,正常则说明可以开始使用了. 基本用法: requests.get()用于请求目标网站,类型是一个HTTPresponse类型 import requests response = requests.get('http://www.baidu.com')print(response.status_c

  • python requests库的使用

    requests模块 使用requests可以模拟浏览器的请求,requests模块的本质是封装了urllib3模块的功能,比起之前用到的urllib,requests模块的api更加便捷 requests库发送请求将网页内容下载下来以后,并不会执行js代码,这需要我们自己分析目标站点然后发起新的request请求,但是selenium模块就可以执行js的操作. 安装: pip3 install requests 请求方式:主要用到的就get和post两种 #各种请求方式:常用的就是reques

  • Python HTTP库 requests 的简单使用详情

    目录 1.简单使用 2.构建请求查询参数 3.构建请求头Headers 4.构建POST请求数据 4.1 表单数据 4.2 json数据 5.获取响应内容 6.Cookies 7.超时配置 8.代理 requests库实现了HTTP协议中绝大部分功能,提供了Keep-Alive.连接池.Cookie持久化.HTTP(S)代理支持.连接超时等很多功能特性,最重要的是它同时支持Python2和ython3,而且能在PyPy下完美运行. 使用前需要使用pip install requests命令进行安

  • python爬虫之requests库的使用详解

    目录 python爬虫-requests库的用法 基本的get请求 带参数的GET请求: 解析json 使用代理 获取cookie 会话维持 证书验证设置 超时异常捕获 异常处理 总结 python爬虫-requests库的用法 requests是python实现的简单易用的HTTP库,使用起来比urllib简洁很多,requests 允许你发送 HTTP/1.1 请求.指定 URL并添加查询url字符串即可开始爬取网页信息等操作 因为是第三方库,所以使用前需要cmd安装 pip install

  • Python爬虫之requests库基本介绍

    目录 一.说明 二.基本用法: 总结 一.说明 requests是一个很实用的Python HTTP客户端库,爬虫和测试服务器响应数据时经常会用到,requests是Python语言的第三方的库,专门用于发送HTTP请求,使用起来比urllib简洁很多. Requests 有这些功能: 1.Keep-Alive & 连接池2.国际化域名和 URL3.带持久 Cookie 的会话4.浏览器式的 SSL 认证5.自动内容解码6.基本/摘要式的身份认证7.优雅的 key/value Cookie8.自

  • 离线安装python的requests库方法

    目录 前言 1.下载安装包 1.1 检查requests模块所需依赖包 1.2 下载requests所需依赖包 1.3 下载requests包 2.安装 2.1 安装requests所需依赖包 2.2 安装requests 3.检查是否安装成功 总结 前言 本文详细记录了在win7中离线安装python requests的过程,包括安装requests所需依赖包. 环境:win7.python3.8.9(win7中可安装的最新python版本).无法连接互联网 1.下载安装包 1.1 检查req

  • Python中requests库的学习方法详解

    目录 前言 一 URL,URI和URN 1. URL,URI和URN 2. URL的组成 二 请求组成 1. 请求方法 2. 请求网址 3. 请求头 4. 请求体 三 请求 1. get请求 2. get带请求头headers参数 3. post请求 四 响应 1. 响应状态码 2. 响应头 3. 响应体 总结 前言 好记性不如烂笔头!最近在接口测试,以及爬虫相关,需要用到Python中的requests库,之前用过,但是好久没有用又忘了,这次就把这块的简单整理下(个人笔记使用) 一 URL,U

  • Python中requests库的用法详解

    目录 一.requests库 安装 请求 响应 二.发送get请求 1.一个带参数的get请求: 2.响应json 3.添加头信息headers 4.添加和获取cookie信息 三.发送post请求 1.一个带参数的Post请求: 2.传递JSON数据 3.文件上传 四.高级应用 1.session会话维持 2.身份验证 3.代理设置 4.证书验证 5.超时时间 6.重定向与请求历史 7.其他 五.异常处理 六.requests库和urllib包对比 1.使用urllib.request 2.使

  • Python中Selenium库使用教程详解

    selenium介绍 selenium最初是一个自动化测试工具,而爬虫中使用它主要是为了解决requests无法直接执行JavaScript代码的问题 selenium本质是通过驱动浏览器,完全模拟浏览器的操作,比如跳转.输入.点击.下拉等,来拿到网页渲染之后的结果,可支持多种浏览器 中文参考文档 官网 环境安装 下载安装selenium pip install selenium -i https://mirrors.aliyun.com/pypi/simple/ 谷歌浏览器驱动程序下载地址:

  • Python 中Pickle库的使用详解

    在"通过简单示例来理解什么是机器学习"这篇文章里提到了pickle库的使用,本文来做进一步的阐述. 那么为什么需要序列化和反序列化这一操作呢? 1.便于存储.序列化过程将文本信息转变为二进制数据流.这样就信息就容易存储在硬盘之中,当需要读取文件的时候,从硬盘中读取数据,然后再将其反序列化便可以得到原始的数据.在Python程序运行中得到了一些字符串.列表.字典等数据,想要长久的保存下来,方便以后使用,而不是简单的放入内存中关机断电就丢失数据.python模块大全中的Pickle模块就派

  • Python中optparser库用法实例详解

    本文研究的主要是Python中optparser库的相关内容,具体如下. 一直以来对optparser不是特别的理解,今天就狠下心,静下心研究了一下这个库.当然了,不敢说理解的很到位,但是足以应付正常的使用了.废话不多说,开始今天的分享吧. 简介 optparse模块主要用来为脚本传递命令参数功能. 引入 在IDE中引入optparser是很方便的. from optparser import OptionParser 初始化 相对而言,初始化需要我们多注意一点点了. 因为我们有两种不同的方式来

  • Python中selenium库的用法详解

    selenium主要是用来做自动化测试,支持多种浏览器,爬虫中主要用来解决JavaScript渲染问题. 模拟浏览器进行网页加载,当requests,urllib无法正常获取网页内容的时候 一.声明浏览器对象 注意点一,Python文件名或者包名不要命名为selenium,会导致无法导入 from selenium import webdriver #webdriver可以认为是浏览器的驱动器,要驱动浏览器必须用到webdriver,支持多种浏览器,这里以Chrome为例 browser = w

  • Python 中拼音库 PyPinyin 用法详解

    最近碰到了一个问题,项目中很多文件都是接手过来的中文命名的一些素材,结果在部署的时候文件名全都乱码了,导致项目无法正常运行. 后来请教了一位大佬怎么解决文件名乱码的问题,他说这个需要正面解决吗?不需要,把文件名全部改掉,文件名永远不要用中文,永远不要. 我想他这么说的话,一定也是凭经验得出来的. 这里也友情提示大家,项目里面文件永远不要用中文,永远不要! 好,那不用中文用啥?平时来看,一般我们都会用英文来命名,一般也不会出现中文,比如 resource, controller, result,

  • Python中矩阵库Numpy基本操作详解

    NumPy是一个关于矩阵运算的库,熟悉Matlab的都应该清楚,这个库就是让python能够进行矩阵话的操作,而不用去写循环操作. 下面对numpy中的操作进行总结. numpy包含两种基本的数据类型:数组和矩阵. 数组(Arrays) >>> from numpy import * >>> a1=array([1,1,1]) #定义一个数组 >>> a2=array([2,2,2]) >>> a1+a2 #对于元素相加 array(

  • python中requests库session对象的妙用详解

    在进行接口测试的时候,我们会调用多个接口发出多个请求,在这些请求中有时候需要保持一些共用的数据,例如cookies信息. 妙用1 requests库的session对象能够帮我们跨请求保持某些参数,也会在同一个session实例发出的所有请求之间保持cookies. 举个栗子,跨请求保持cookies,在命令行上输入下面命令: # 创建一个session对象 s = requests.Session() # 用session对象发出get请求,设置cookies s.get('http://ht

随机推荐