requests模块



1、简介


afa24d67bb674521b4d8139c3457c262.png

        Requests是⼀个优雅⽽简单的Python HTTP库,专为⼈类⽽构建。

        Requests是有史以来下载次数最多的Python软件包之⼀,每天下载量超过400,000次。

        

        之前的urllib做为Python的标准库,因为历史原因,使⽤的⽅式可以说是⾮常的麻烦⽽复杂的,⽽且官⽅⽂档也⼗分的简陋,常常需要去查看源码。与之相反的是,Requests的使⽤⽅式⾮常的简单、直观、⼈性化,让程序员的精⼒完全从库的使⽤中解放出来。

2、安装


在命令行窗口输⼊命令:

pip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple

3、发送请求


使⽤ Requests 发送⽹络请求⾮常简单。导包之后添加⽅法进⾏。

Requests的请求不再像urllib⼀样需要去构造各种Request、opener和handler,使⽤Requests构造的⽅法,并在其中传⼊需要的参数即可。

每⼀个请求⽅法都有⼀个对应的API,⽐如GET请求就可以使⽤get()⽅法,⽽POST请求就可以使⽤post()⽅法,并且将需要提交的数据传递给data参数即可,⽽其他的请求类型,都有各⾃对应的⽅法:

import requests

resp = requests.get('https://www.baidu.com')
resp = requests.post('http://httpbin.org/post', data={'key':'value'})
resp = requests.put('http://httpbin.org/put', data={'key':'value'})
resp = requests.delete('http://httpbin.org/delete')
resp = requests.head('http://httpbin.org/get')
resp = requests.options('http://httpbin.org/get')

print(resp)

发起请求的⽅法变得简单,我们只需要着重关注⼀下发起请求的参数 :

request源码

def request(url,params=None, headers=None, cookies=None,timeout=None,allow_redirects=True,proxies=None,verify=None, data=None,json=None):
        pass

httpbin.org

这个网站是程序员用来做测试的,用来验证请求

{
  "args": {}, 
  "headers": {
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", 
    "Accept-Encoding": "gzip, deflate", 
    "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6", 
    "Host": "httpbin.org", 
    "Upgrade-Insecure-Requests": "1", 
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36 Edg/112.0.1722.39", 
    "X-Amzn-Trace-Id": "Root=1-643813dc-7be19f3e27c8a4696424b8cc"
  }, 
  "origin": "58.212.74.124", 
  "url": "http://httpbin.org/get"
}

(1)url

添加请求路径

import requests

url='https://www.baidu.com/'
response = requests.get(url=url)
print(response)

运行结果:

074ed5b43e56457895d8b44f04293f40.png

httpbin.org

1dd0c52efb2e4ceda089b700a665c7b3.png

(2)params

添加请求参数

传递URL参数也不⽤再像urllib中那样需要去拼接URL,⽽是简单的,构造⼀个字典,并在请求时将其传递给params参数,此时,查看请求的URL,则可以看到URL已经构造正确.

eg:

1.在url中直接添加参数

import requests

url = 'http://httpbin.org/get?key1=value1&key2=value2'
response = requests.get(url=url)
print(response.text)

2.构造字典

import requests

url = 'http://httpbin.org/get'
params = {
    'key1':'value1','key2':'value2'
}
response = requests.get(url=url,params=params)
print(response.text)

运行结果:

c07949189a064501b547770773cfc94f.png

(3)headers

添加请求头

如果想⾃定义请求的Headers,同样的将字典数据传递给headers参数。

 通过添加请求头来伪造自己的身份

341337ab76024e5dafb7f27f5db59796.png

eg:

import requests
​
url = 'https://httpbin.org/get'
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36"
}
response = requests.get(url=url,headers=headers)
print(response.text)

运行结果:

80cb08911e0347a0babe36687978edce.png

"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36"
    
# 携带的内容:操作系统、浏览器等

(4)cookies

状态保持

储存用户身份

Requests中⾃定义Cookies也不⽤再去构造CookieJar对象,直接将字典递给cookies参数。

服务器是不记录用户信息的,为了让服务器能够识别用户,用户每次访问的时候就给它一个cookies,这个cookies保存在浏览器(本地电脑)。

eg:

1.在请求头中构造

import requests
​
url = 'https://httpbin.org/get'
headers={
    "User-Agent": "",
    'cookie': 'crawler',
    'referer': 'crawler' # 防盗链
}
response = requests.get(url=url,headers=headers)
print(response.text)

2.单独构造

import requests
​
url = 'https://httpbin.org/get'
headers={
  "User-Agent": "crawler1"
}
cookies = {'name':'crawler1' }
response = requests.get(url=url,headers=headers,cookies=cookies)
print(response.text)

运行结果:

(5)timeout

设置超时时间

当访问超时,设置timeout参数即可。

import requests
​
url = 'http://www.baidu.com'
resp = requests.get(url, timeout=3)
print(resp.text)

由于是国外的网站,访问会超时,会一直等待响应,这时我们设置超时时间,超时时间已过之后就会超时报错

运行结果:

(6)proxies

设置代理

当我们需要使⽤代理时,同样构造代理字典,传递给proxies参数。

请求端ip地址

eg:

import requests
​
url = 'https://httpbin.org/get'
proxies = {
  'http':'183.209.124.38:8088' # 代理ip
}
response = requests.get(url=url,proxies=proxies)
print(response.text)

运行结果:

快代理 - 企业级HTTP代理IP云服务我这里使用的代理ip不可用,可以购买使用:快代理 - 企业级HTTP代理IP云服务

(7)verify

证书忽略验证

有时候我们使⽤了抓包⼯具,这个时候由于抓包⼯具提供的证书并不是由受信任的数字证书颁发机构颁发的,证书默认是开启的,所以证书的验证会失败,所以我们就需要关闭证书验证。在请求的时候把verify参数设置为False就可以关闭证书验证了。

eg:

import requests
​
url = 'https://httpbin.org/get'
response = requests.get(url=url,verify=False) # 出现警告
print(response.content.decode())

运行结果:

PS:关闭验证后,会有⼀个⽐较烦⼈的warning,当不影响运行的结果,关闭即可。

import warnings
​
warnings.filterwarnings("ignore")

(8)data

携带数据

POST请求发送Form表单数据

eg:

import requests
​
url = 'http://httpbin.org/post'
data = {"name":"spider"}
resp = requests.post(url, data=data)
print(resp.text)

运行结果:

 (9)json

携带数据

eg:

url = 'https://httpbin.org/post'
data = {
    'name':'crawler'
}
response = requests.post(url=url,json=data)
print(response.text)

运行结果:

注意:

PS:json和data 不可以同时添加

4、response响应对象

# print(resp.text)    # 转换成字符串    文本形式输出源代码
# print(resp.text[0])
# str类型


print(resp.content) # 转换成字节 原因: 1.网页源代码乱码    2.保存图片、视频、音频等二进制
# bytes类型

# print(resp.content.decode # 解码 ,默认utf-8
# print(resp.content.decode('utf-8'))
# <class 'builtin_function_or_method'> ——内置函数

print(resp.status_code) # 状态码
# int类型

# print(resp.headers) # 响应头
# print(resp.cookies) # 响应的cookie
# print(resp.url) # 请求的url
# print(resp.request.url) # 请求的url
# print(resp.request.headers) # 请求头

# 方法json

# print(resp.json()) # 转换成json类型
# print(resp.json()['headers']['X-Amzn-Trace-Id'])



# print(resp.text)
# print(resp.text[-11:-8])

# 也可以用python中内置的json包
import json
data_json = json.loads(resp.text) # 字符串转为 dict
print(data_json['headers']['X-Amzn-Trace-Id'])

# print(json.dumps(data_json)) # dict 转为 字符串类型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老小孩-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值