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实现定时备份mysql数据库并把备份数据库邮件发送
Mar 08 Python
pygame实现俄罗斯方块游戏
Jun 26 Python
Python封装成可带参数的EXE安装包实例
Aug 24 Python
Python 如何优雅的将数字转化为时间格式的方法
Sep 26 Python
春节到了 教你使用python来抢票回家
Jan 06 Python
PyTorch 随机数生成占用 CPU 过高的解决方法
Jan 13 Python
完美解决pycharm 不显示代码提示问题
Jun 02 Python
Keras在训练期间可视化训练误差和测试误差实例
Jun 16 Python
python logging 重复写日志问题解决办法详解
Aug 04 Python
python+selenium+chrome实现淘宝购物车秒杀自动结算
Jan 07 Python
教你怎么用Python操作MySql数据库
May 31 Python
Python下opencv使用hough变换检测直线与圆
Jun 18 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
php 运行效率总结(提示程序速度)
2009/11/26 PHP
浅谈php serialize()与unserialize()的用法
2013/06/05 PHP
解析获取优酷视频真实下载地址的PHP源代码
2013/06/26 PHP
codeigniter框架The URI you submitted has disallowed characters错误解决方法
2014/05/06 PHP
php多线程实现方法及用法实例详解
2015/10/26 PHP
基于ThinkPHP5.0实现图片上传插件
2017/09/25 PHP
laravel框架中路由设置,路由参数和路由命名实例分析
2019/11/23 PHP
28个JS验证函数收集
2010/03/02 Javascript
ExtJS 下拉多选框lovcombo
2010/05/19 Javascript
javascript语言结构小记(一)
2011/09/10 Javascript
Javascript 检测键盘按键信息及键码值对应介绍
2013/01/03 Javascript
JavaScript去除空格的三种方法(正则/传参函数/trim)
2013/02/06 Javascript
Jquery Mobile 自定义按钮图标
2015/11/18 Javascript
js Canvas实现的日历时钟案例分享
2016/12/25 Javascript
用原生js做单页应用
2017/01/17 Javascript
js自制图片放大镜功能
2017/01/24 Javascript
利用Jquery实现几款漂亮实用的时间轴(附示例代码)
2017/02/15 Javascript
JS实现的简单表单验证功能示例
2017/10/13 Javascript
详解如何在React组件“外”使用父组件的Props
2018/01/12 Javascript
快速了解vue-cli 3.0 新特性
2018/02/28 Javascript
VUE+Element环境搭建与安装的方法步骤
2019/01/24 Javascript
Python中实现三目运算的方法
2015/06/21 Python
基于Python和Scikit-Learn的机器学习探索
2017/10/16 Python
Python获取本机所有网卡ip,掩码和广播地址实例代码
2018/01/22 Python
对python 矩阵转置transpose的实例讲解
2018/04/17 Python
Python实现获取汉字偏旁部首的方法示例【测试可用】
2018/12/18 Python
python获取服务器响应cookie的实例
2018/12/28 Python
使用python接受tgam的脑波数据实例
2020/04/09 Python
CSS3 仿微信聊天小气泡实例代码
2017/04/05 HTML / CSS
GNC健安喜美国官网:美国第一营养品牌
2016/07/22 全球购物
GetYourGuide台湾:预订旅游活动、景点和旅游项目
2019/06/10 全球购物
List、Map、Set三个接口,存取元素时,各有什么特点?
2015/09/27 面试题
12月红领巾广播稿
2014/02/13 职场文书
中学清明节活动总结
2014/07/04 职场文书
骨干教师申报材料
2014/12/17 职场文书
解决numpy数组互换两行及赋值的问题
2021/04/17 Python