python-requests模块简要使用

一、介绍

官方文档:Requests: HTTP for Humans™ — Requests 2.28.0 documentation

二、 response响应对象

1. 响应对象编码

当你发出一个请求时,requests模块会有根据的对响应内容的编码进行猜测并解码,可以使用response.text获取响应正文即网页源码。如果出现乱码可以通过response.encoding =的方式更改编码。

>>> print(response.encoding)
ISO-8859-1
>>> response.encoding = 'utf-8'
>>> print(response.encoding)
utf-8

以字节形式访问响应正文response.content.decode('默认为utf-8')

  • response.text

    类型:str

    解码:按照requests的猜测进行解码

  • response.content

    类型:bytes(字节)

    解码:没有指定,可以自行更改解码类型

2. 其他常用属性和方法

  • response.url -响应的url

  • response.status_code -状态码

  • response.request.headers -响应对应的请求的请求头

  • response.headers -响应头

  • response.cookies -响应携带的cookies,返回cookiejar类型

三、发送请求

以百度(百度一下,你就知道)为例:

import requests
​
​
url = 'http://www.baidu.com'
response = requests.get(url)
print(len(response.text))
​
# 打印结果其源代码长度大概是在2000左右

这个结果与我们在浏览器中使用访问百度网页的源码长度相差甚远。并且代码所展示的页面也有差异。如果我们加上请求标头就可以通过代码得到正常浏览器访问百度所得到的页面或者html源代码文件。

在浏览器中检查网页,点击网络再刷新进行抓包,查看标头,标头下面有请求头,请求头中有三项最为重要:user-agent、cookie和referer。对于百度,将其中的user-agent写到我们的headers中即可得到完全的源码文件。

有两种带参数url请求的发送方法:

  • 直接在url的后面带上参数(无关参数可以删去)

  • 将url参数写到一个字典中,再在发送请求时将url参数字典赋值给params

cookie参数字典的使用

在发送请求时,可以构建一个存放cookie的字典,并在get中赋值给cookies,以此来替代headers中的cookies

构建cookies字典两种方式

import requests
​
​
url = ''
headers = {'user-agent': '......'}
temp = "buvid3=0F10E46C-44E0-45F1-9070-8AB1DCC95E63148800infoc; _uuid=98799F81-5EF4-D431-51E4-CAF5828BE21641934infoc; buvid4=8480F3F3-1267-F3ED-8FB1-D81E032B9FFB43101-022020420-+d37gNVrI6ls7BZ8Uxpd9w==; LIVE_BUVID=AUTO4316439791453727; buvid_fp_plain=undefined; i-wanna-go-back=-1; b_ut=5; rpdid=|(kJRlRuum~l0J'uYRJm)uYR|; DedeUserID=351383250; DedeUserID__ckMd5=4136b315923a5cfa; buvid_fp=75d89ba0acd1540d6d9475050cafb7f5; fingerprint3=557df58fe665b4a1198a52dd75c6b5d4; CURRENT_BLACKGAP=0; nostalgia_conf=-1; fingerprint=d453637bc7394257eba7d0f7efc6d034; hit-dyn-v2=1; CURRENT_QUALITY=80; blackside_state=0; go_old_video=1; SESSDATA=c10b62b5,1670840684,8454e*61; bili_jct=f2155d87c5f3f773f27a9ee40953b7c5; sid=inmptbgw; bp_video_offset_351383250=673063534848901100; PVID=1; CURRENT_FNVAL=4048; innersign=1; bsource=share_source_copy_link; b_timer={"ffp":{"333.1007.fp.risk_0F10E46C":"18179F8BB93","333.788.fp.risk_0F10E46C":"1817A41EDAC","333.999.fp.risk_0F10E46C":"1817A0F5E8A","444.41.fp.risk_0F10E46C":"1817A1C071B","333.934.fp.risk_0F10E46C":"1817A251FD0"}}; b_lsid=6C1065E74_1817A4BE4A6"
​
# 首先对字符串进行分割
cookies_list = temp.split('; ')
# 创建一个字典
cookies = {}
for n in cookies_list:
    cookies[n.split('=')[0]] = cookies[n.split('=')[-1]]
​
# 等效于cookies{cookie.split('=')[0]: cookie.split('=')[-1]for n in cookies_list}
response = requests.get(url, headers=headers, cookies=cookies)

超时参数的设置

在发送请求时,如果超过了一定的时间没能得到响应,则会抛出异常。默认为180秒,我们可以使用timeout来设置时间。

import requests
​
​
url = ''
response = requests.get(url, timeout=3)  # 发送请求后,3秒内返回响应,否则抛出异常

四、代理

1. 简介

代理ip是一个ip,指向的是一个代理服务器。代理服务器能够帮助我们向目标服务器发送请求。相当于我们浏览器与目标服务器之间的中介。

2. 正向代理与反向代理

从发送请求的一方,来区分正向与反向。

  • 为浏览器即发送请求的一方转发请求的,叫正向代理

    • 浏览器知道最终处理请求的服务器的真实IP地址,如VPN、翻墙软件。

  • 不为浏览器转发请求,而为最终处理请求的服务器转发请求的,叫反向代理

    • 浏览器不知道服务器的真实地址,如nginx。

3. 代理分类

根据匿名度分类

透明代理,可以隐藏你的IP地址,但对方仍能查到你是谁。目标服务器收到的请求头如下:

REMOTE_ADDR = Proxy IP
HTTP_VIA = Proxy IP
HTTP_X_FORWARD_FOR = Your IP

匿名代理,对方只知道你用了代理,但不知道你是谁。目标服务器收到的请求头如下:

REMOTE_ADDR = Proxy IP
HTTP_VIA = Proxy IP
HTTP_X_FORWARD_FOR = Proxy IP

高匿代理,对方无法确定你是否使用了代理。使用高匿代理效果最好,是最好的选择。目标服务器收到的请求头如下:

REMOTE_ADDR = Proxy IP
HTTP_VIA = no determined
HTTP_X_FORWARD_FOR = no determined

根据协议分类

根据网站使用的协议不同,需要使用相应协议的代理服务:http代理、https代理、socks代理。

4. 代理参数proxies的使用

为了让服务器认为不是在同一个客户端进行请求,避免因频繁向同一个域名发送请求而被封IP,所以我们写爬虫需要使用代理IP。

response = requests.get(url, proxies=proxies)  # proxies是一个字典类型
​
# proxies字典有一个十分重要的格式要求
proxies = {
    "http": "http://IP地址:端口号",
    "https": "https://IP地址:端口号"
}
# 需要根据url地址的协议来选择相应的代理

网上有很多可以用的代理IP(也有很多无法使用的),可以自行百度。

代理使用失败,两个结果:程序就这样卡住;程序报错。(前提是代码没有其他问题)

五、使用verify参数忽略CA证书

CA证书:简单说,就是一个验证你所访问的网站是否真的是你所访问的网站,相当于一封介绍信上的公章。仅针对https协议,所有使用https协议的网站都会有这么一个验证机制。如果你访问的网站证书出现问题,那么浏览器会对你进行询问,你可以选择是否继续访问该网站。

关于CA证书更多详情信息:数字证书及CA详解_盐水煮毛豆的博客-CSDN博客_ca证书

如果我们使用requests访问的网站证书有问题,那么程序会报错。‘certificate verify failed’

response = requests.get(url, verify=Flase)  # 此时程序将忽略CA证书的认证,会返回响应和一个警告

六、post请求

以下情况可能用到post请求:

  • 登录注册

  • 传输大文本内容时

使用post请求需要另外传入一个请求体字典,赋给data

response = requests.post(url, data=data)  # 其余参数用法与get方法一样

data数据的获取

  • 固定值

  • 输入值

  • 预设值——静态文件 -在静态html文件中获取

  • 预设值——发送请求 -对指定地址发送请求获取

  • 客户端(浏览器)生成的值 -分析js,模拟生成获取

七、requests.session的使用

1. 简介

session是requests模块里面的一个类,可以自动处理获取响应中产生的cookie,从而达到一个状态保持的目的。

作用:自动处理cookie,下一次请求会携带上一次的cookie。

2. session的使用方法

session = requessts.session()
response = session.get(url, ...)
response = session.post(url, data, ...)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值