Python中request的基本使用解决乱码问题


Posted in Python onApril 12, 2022

各种请求方式

pip3 install requests
>>> import requests
>>> r = requests.get('https://www.cnblogs.com')
>>> r = requests.post('https://www.cnblogs.com', data = {'key':'value'})
>>> r = requests.put('https://www.cnblogs.com', data = {'key':'value'})
>>> r = requests.delete('https://www.cnblogs.com')
>>> r = requests.head('https://www.cnblogs.com')
>>> r = requests.options('https://www.cnblogs.com')

request各种参数

参数 说明
params 字典或字节序列,作为参数增加到url中
data 字典,字节序列或文件对象,作为request的内容
json JSON格式的数据,作为request的内容
headers 字典,HTTP定制头
cookies 字典或CookieJar, request中的cookie
auth 元组,支持HTTp认证功能
files 字典类型,传输文件
timeout 设定超时时间,秒为单位
proxies 字典类型,设定访问代理服务器,可以增加登录认证
allow_redirects 重定向开关,默认为True
stream 获取内容立即下载开关,默认为True
verify 认证SSL证书开关,默认为True
cert 本地SSL证书路径

request基本使用

import requests
response = requests.get('https://www.cnblogs.com/kermitjam/')
print(response.text)

print(respone.text)  # 响应体转成str
print(respone.content)  # 响应体二进制(图片,视频)
print(respone.status_code)  # 响应状态码
print(respone.headers)  # 响应头
print(respone.cookies)  # 服务端返回的cookie
print(respone.cookies.get_dict())  # 转成字典
print(respone.cookies.items())
print(respone.url)  # 当次请求的地址
print(respone.history)  # 如果有重定向,放到一个列表中.查看上一次请求从哪里来。(图片防盗链)
print(respone.encoding)  # 编码方式
print(respone.iter_content())  # 视频,图片迭代取值
content-length   # 查看下载前文件大小


response.iter_content() # 视频,图片迭代取值
with open("a.mp4",'wb') as f:
    for line in response.iter_content():
        f.write(line)

get请求携带参数

# 方式一:会转码,不推荐
response = requests.get('https://www.baidu.com/s?wd=%E7%BE%8E%E5%A5%B3')

# 方式二:推荐
response = requests.get('https://www.baidu.com/',params={'name':'美女','age':18})

get请求携带headers头

respone = requests.get('http://127.0.0.1:8000/',params={'name':'美女','age':18},
                   headers={
                       # 标志,什么东西发出的请求,浏览器信息,django框架,从哪取?(meta)
                       'User-Agent': 'request',
                       # 上一个页面的地址,图片防盗链
                       'Referer': 'xxx'
                   })
print(respone.status_code)

get请求携带cookie

带cookie,随机字符串(用户信息:也代表session),不管后台用的token认证,还是session认证

一旦登陆了,带着cookie发送请求,表示登陆了(下单,12306买票,评论)

# 第一种方式
ret = requests.get('http://127.0.0.1:8000/',params={'name':'美女','age':18},
                   headers={
                       'cookie': 'key3=value;key2=value',
                   })

# 第二种方式
ret = requests.get('http://127.0.0.1:8000/',params={'name':'美女','age':18},
                   cookies={"islogin":"xxx"})
print(ret.status_code)

post请求携带数据(注册、登录)

# data:urlencoded编码
ret = requests.post('http://127.0.0.1:8000/', data={'name': "jeff", 'age': 18})


# data:json编码
import json
data = json.dumps({'name': "jeff", 'age': 18})
ret = requests.post('http://127.0.0.1:8000/', json=data)
print(ret)
# 注意:编码格式是请求头中带的,所以可以手动修改,在headers中改

session对象

# session对象
session=requests.session()
# 跟requests.get/post用起来完全一样,但是它处理了cookie
# 假设是一个登陆,并且成功
res = session.post('http://127.0.0.1:8000/')
# # 再向该网站发请求,就是登陆状态,不需要手动携带cookie
res = session.get("http://127.0.0.1:8000/")

print(res)

乱码问题

# 加载回来的页面,打印出来,乱码(我们用的是utf8编码),如果网站用gbk,

ret = requests.get('http://127.0.0.1:8000/')
ret.encoding='gbk'  # 修改编码

print(ret.apparent_encoding)  # 当前页面的编码
# ret.encoding = ret.apparent_encoding
print(ret.encoding)
print(ret.apparent_encoding)

解析json数据

# 返回数据,有可能是json格式,有可能是html格式
ret=requests.get('http://127.0.0.1:8000/')
# print(type(ret.text))
# print(ret.text)

a=ret.json()
print(a['name'])
print(type(a))

使用代理

代理简单解释:
	代理其实就是一个中介,A和B本来可以直连,中间插入一个C,C就是中介。
	
#高匿:服务端,根本不知道我是谁
#普通:服务端是能够知道我的ip的
#http请求头中:X-Forwarded-For:代理的过程

爬虫使用正向代理好处:
	1.突破频率限制。做个代理池,每次请求都是不同的Ip,服务器认为是不同的用户
	2.不会封自己的ip。

正向代理即是客户端代理, 代理客户端, 服务端不知道实际发起请求的客户端.
反向代理即是服务端代理, 代理服务端, 客户端不知道实际提供服务的服务端
ret = requests.get('https://www.pearvideo.com/', proxies={'http': '47.115.54.89'})
print(type(ret.text))
print(ret.text)

上传文件

# 爬虫用的比较少,后台写服务

file = {'myfile': open("1.txt", 'rb')}
ret = requests.post('http://127.0.0.1:8000/', files=file)
print(ret.content)

以上就是request基本使用及各种请求方式参数的示例的详细内容!

Python 相关文章推荐
从零学Python之引用和类属性的初步理解
May 15 Python
探究Python的Tornado框架对子域名和泛域名的支持
May 02 Python
python冒泡排序简单实现方法
Jul 09 Python
在Django的通用视图中处理Context的方法
Jul 21 Python
Python中import导入上一级目录模块及循环import问题的解决
Jun 04 Python
详解Python中where()函数的用法
Mar 27 Python
Python自动发送邮件的方法实例总结
Dec 08 Python
对python中不同模块(函数、类、变量)的调用详解
Jul 16 Python
python中append实例用法总结
Jul 30 Python
python3 deque 双向队列创建与使用方法分析
Mar 24 Python
python pandas.DataFrame.loc函数使用详解
Mar 26 Python
python将YUV420P文件转PNG图片格式的两种方法
Jan 22 Python
python模拟浏览器 使用selenium进入好友QQ空间并留言
Python安装使用Scrapy框架
Python使用华为API为图像设置多个锚点标签
python实现手机推送 代码也就10行左右
Apr 12 #Python
Python内置包对JSON文件数据进行编码和解码
详细介绍python操作RabbitMq
Python selenium绕过webdriver监测执行javascript
Apr 12 #Python
You might like
在windows服务器开启php的gd库phpinfo中未发现
2013/01/13 PHP
thinkPHP线上自动加载异常与修复方法实例分析
2016/12/01 PHP
浅谈laravel aliases别名的原理
2019/10/24 PHP
Jquery Ajax学习实例7 Ajax所有过程事件分析示例
2010/03/23 Javascript
JavaScript 处理Iframe自适应高度(同或不同域名下)
2013/03/29 Javascript
动态获取复选框checkbox选中个数的jquery代码
2013/06/25 Javascript
使用js实现关闭js弹出层的窗口
2014/02/10 Javascript
使表格的标题列可左右拉伸jquery插件封装
2014/11/24 Javascript
Nodejs实战心得之eventproxy模块控制并发
2015/10/27 NodeJs
Bootstrap每天必学之滚动监听
2016/03/16 Javascript
简单实现js间歇或无缝滚动效果
2016/06/29 Javascript
使用BootStrap进行轮播图的制作
2017/01/06 Javascript
详解axios在vue中的简单配置与使用
2017/05/10 Javascript
vue router2.0二级路由的简单使用
2017/07/05 Javascript
Vue常见面试题整理【值得收藏】
2018/09/20 Javascript
微信小程序实现两个页面传值的方法分析
2018/12/11 Javascript
mpvue性能优化实战技巧(小结)
2019/04/17 Javascript
bootstrap table实现横向合并与纵向合并
2019/07/18 Javascript
Python中实现两个字典(dict)合并的方法
2014/09/23 Python
解决Tensorboard可视化错误:不显示数据 No scalar data was found
2020/02/15 Python
解决启动django,浏览器显示“服务器拒绝访问”的问题
2020/05/13 Python
Python 如何在字符串中插入变量
2020/08/01 Python
Python 利用OpenCV给照片换底色的示例代码
2020/08/03 Python
Python批量修改xml的坐标值全部转为整数的实例代码
2020/11/26 Python
matplotlib 画动态图以及plt.ion()和plt.ioff()的使用详解
2021/01/05 Python
AmazeUI 评论列表的实现示例
2020/08/13 HTML / CSS
英国排名第一的礼品体验公司:Red Letter Days
2018/08/16 全球购物
什么造成了Java里面的异常
2016/04/24 面试题
Servlet面试题库
2015/07/18 面试题
乡镇信息公开实施方案
2014/03/23 职场文书
《彩色世界》教学反思
2014/04/12 职场文书
教师师德演讲稿
2014/05/06 职场文书
企业安全生产演讲稿
2014/05/09 职场文书
儿子满月酒致辞
2015/07/29 职场文书
《艾尔登法环》1.03.3补丁上线 碎星伤害调整
2022/04/07 其他游戏
ipad隐藏软件app图标方法
2022/04/19 数码科技