侧边栏壁纸
博主头像
行迹小栈

即使明天我们的手脚都会折断,但是我们的衣领和袖口,依然笔挺!

  • 累计撰写 113 篇文章
  • 累计创建 13 个标签
  • 累计收到 9 条评论

目 录CONTENT

文章目录

Requests

Administrator
2024-07-24 / 0 评论 / 0 点赞 / 8 阅读 / 0 字 / 正在检测是否收录...

requests

import requests
	#方法						#说明
requests.requst() # 构造一个请求,最基本的方法,是下面方法的支撑
requests.get()	 # 获取网页,对应HTTP中的GET方法
requests.post()	 # 向网页提交信息,对应HTTP中的POST方法
requests.head()	 # 获取html网页的头信息,对应HTTP中的HEAD方法
requests.put()	 # 向html提交put方法,对应HTTP中的PUT方法
requests.patch()	 # 向html网页提交局部请求修改的的请求,对应HTTP中的PATCH方法
requests.delete() # 向html提交删除请求,对应HTTP中的DELETE方法

requests.get()

requests.get(url,params=None,headers,timeout)
# url:网址
# params:可以将字典传入到url中,作为携带的参数,拼接url
# headers:请求的头部信息,伪装成浏览器
# timeout:最长等待时间,否则报错

url = "http://www.baidu.com/s"
params = {"wd":"爬虫"}
r = requests.get(url=url,params=params)
print(r.url)
r.close() #关闭请求
# 运行结果: http://www.baidu.com/s?wd=%E7%88%AC%E8%99%AB

requests.post()

requests.post(url,data,json,params,headers)
# 将要发送的数据封装到data中,封装形式可以是字典、json、元组等
# 发送字典
post_dict = {'key1': 'value1', 'key2': 'value2'}
# 发送元组
post_tuple = (('key1', 'value1'), ('key1', 'value2'))
# 发送json
post_json = {'some': 'data'}
r1 = requests.post(url, data=post_dict)
r2 = requests.post(url,data=post_tuple)
r3 = requests.post(url, json=post_json)

如果出现ssl证书的报错:请求异常,连接超过最大连接次数,最后是因为证书认证失败。

那么我们可以用verify关键字参数,在请求的时候不验证网站的ca证书

response = requests.get( "url",verify=False)
# verify=False 去掉安全验证

Response

每次调用 requests 请求之后,会返回一个 response 对象,该对象包含了具体的响应信息。如下:

属性或方法 说明
apparent_encoding 编码方式
close() 关闭与服务器的连接
content 返回响应的内容,以字节为单位
cookies 返回一个 CookieJar 对象,包含了从服务器发回的 cookie
elapsed 返回一个 timedelta 对象,包含了从发送请求到响应到达之间经过的时间量,可以用于测试响应速度。比如 r.elapsed.microseconds 表示响应到达需要多少微秒。
encoding 解码 r.text 的编码方式
headers 返回响应头,字典格式
history 返回包含请求历史的响应对象列表(url)
is_permanent_redirect 如果响应是永久重定向的 url,则返回 True,否则返回 False
is_redirect 如果响应被重定向,则返回 True,否则返回 False
iter_content() 迭代响应
iter_lines() 迭代响应的行
json() 返回结果的 JSON 对象 (结果需要以 JSON 格式编写的,否则会引发错误)
links 返回响应的解析头链接
next 返回重定向链中下一个请求的 PreparedRequest 对象
ok 检查 "status_code" 的值,如果小于400,则返回 True,如果不小于 400,则返回 False
raise_for_status() 如果发生错误,方法返回一个 HTTPError 对象
reason 响应状态的描述,比如 "Not Found" 或 "OK"
request 返回请求此响应的请求对象
status_code 返回 http 的状态码,比如 404 和 200(200 是 OK,404 是 Not Found)
text 返回响应的内容,unicode 类型数据
url 返回响应的 URL

实例:

import requests

kw = {'s':'python 教程'}
headers = {"User-Agent": "Mozilla/5..."}
# params 接收一个字典或者字符串的查询参数,字典类型自动转换为url编码,不需要urlencode()
response = requests.get("https://www.runoob.com/", params = kw, headers = headers)
# 查看响应状态码
print (response.status_code)

# 查看响应头部字符编码
print (response.encoding)

# 查看完整url地址
print (response.url)

# 查看响应内容:response.text返回的是html头部Unicode格式的数据
print(response.text)
----------------
运行结果
200
UTF-8
https://www.runoob.com/?s=python+%E6%95%99%E7%A8%8B
...返回的html代码...
----------------

返回html响应内容用.text不是所有时候显示都正常,这是就需要用

.content.decode()进行手动编码。

例:

url = "http://www.baidu.com"
r = requsets.get(url=url).content.decode('utf-8')
print(r)
# 运行结果:...<input type=submit id=su value=百度一下 class="bg s_btn"></span>...

得到响应之后,记得关闭这条请求

response = requests.get(url=url,headers=header)
response.close()

session 会话

session 其实是一个会话类,requests 的所有请求方法,底层都是调用的这个类的对象。
其他方法和 session 的区别在于:
直接使用 requests 调用请求方法发送请求,每次都会创建一个新的 session(会话对象),所以没有之前请求的 cookies 信息
直接创建一个 session 对象来发请求,那么每次发请求用的都是这个会话对象,所有能够保存之前的会话信息(cookies 数据)

url = 'https://www.baidu.com'

headers = {
    'User-Agent':UserAgent().random
}

s = requests.Session()

##### 第一次访问
r = s.get(url=url,headers=headers)
print("首次的请求头是:",r.request.headers)
print("设置的cookie是::",requests.utils.dict_from_cookiejar(r.cookies))

########## 第二次访问
rr = s.get(url=url,headers=headers)
print("第二次的请求头是:",rr.request.headers)
-----------------------------------------------------------------------------
运行结果:

首次的请求头是: {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:45.66.18) Gecko/20177177 Firefox/45.66.18', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive'}
设置的cookie是:: {'BAIDUID': 'EACE029FC9A984029D658312093A26C6:FG=1', 'BIDUPSID': 'EACE029FC9A98402451D675B5AA498AE', 'H_PS_PSSID': '36543_37647_38024_37907_36920_37990_37795_37926_37900_26350_37881', 'PSTM': '1672410582', 'BDSVRTM': '19', 'BD_HOME': '1'}
第二次的请求头是: {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:45.66.18) Gecko/20177177 Firefox/45.66.18', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'BAIDUID=EACE029FC9A984029D658312093A26C6:FG=1; BIDUPSID=EACE029FC9A98402451D675B5AA498AE; H_PS_PSSID=36543_37647_38024_37907_36920_37990_37795_37926_37900_26350_37881; PSTM=1672410582; BDSVRTM=19; BD_HOME=1'}

进程已结束,退出代码0

第一次访问的请求是没有cookie信息的,但是服务器端返回了cookie,保存在了这个session会话中,所以第二次在访问的时候,请求头里就有了cookie信息。由此可得session是维持会话状态的

0
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区