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获得时间的实例说明
Mar 25 Python
Python写的一个简单DNS服务器实例
Jun 04 Python
python实现跨文件全局变量的方法
Jul 07 Python
在Django的模型中添加自定义方法的示例
Jul 21 Python
Python实现递归遍历文件夹并删除文件
Apr 18 Python
python爬虫的数据库连接问题【推荐】
Jun 25 Python
值得收藏的10道python 面试题
Apr 15 Python
使用python制作一个为hex文件增加版本号的脚本实例
Jun 12 Python
python开启debug模式的方法
Jun 27 Python
python3中numpy函数tile的用法详解
Dec 04 Python
Python2手动安装更新pip过程实例解析
Jul 16 Python
Python实现网络聊天室的示例代码(支持多人聊天与私聊)
Jan 27 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下防止单引号,双引号在接受页面转义的设置方法
2008/09/25 PHP
php自定义函数call_user_func和call_user_func_array详解
2011/07/14 PHP
用PHP+MySQL搭建聊天室功能实例代码
2012/08/20 PHP
仿Aspnetpager的一个PHP分页类代码 附源码下载
2012/10/08 PHP
PHP正则表达式 /i, /is, /s, /isU等介绍
2014/10/23 PHP
php实现cookie加密的方法
2015/03/10 PHP
YII使用url组件美化管理的方法
2015/12/28 PHP
Thinkphp5框架简单实现钩子(Hook)行为的方法示例
2019/09/03 PHP
Javascript Math对象
2009/08/13 Javascript
javascript通过class来获取元素实现代码
2013/02/20 Javascript
Jquery动态改变图片IMG的src地址示例
2013/06/25 Javascript
javascript间隔定时器(延时定时器)学习 间隔调用和延时调用
2014/01/13 Javascript
jsp网页搜索结果中实现选中一行使其高亮
2014/02/17 Javascript
js正则表达式验证邮件地址
2015/11/12 Javascript
javascript类型系统 Array对象学习笔记
2016/01/09 Javascript
picLazyLoad 实现图片延时加载(包含背景图片)
2016/07/21 Javascript
webpack+react+antd脚手架优化的方法
2018/04/02 Javascript
webpack分离css单独打包的方法
2018/06/12 Javascript
Vue表单绑定的实例代码(单选按钮,选择框(单选时,多选时,用 v-for 渲染的动态选项)
2019/05/13 Javascript
基于Web Audio API实现音频可视化效果
2020/06/12 Javascript
Python使用正则表达式抓取网页图片的方法示例
2017/04/21 Python
Ubuntu下使用Python实现游戏制作中的切分图片功能
2018/03/30 Python
Python字符串格式化输出代码实例
2019/11/22 Python
迪卡侬荷兰官网:Decathlon荷兰
2017/10/29 全球购物
Brasty波兰:香水、化妆品、手表网上商店
2019/04/15 全球购物
世界各地的旅游、观光和活动:Isango!
2019/10/29 全球购物
学生学习总结的自我评价
2013/10/22 职场文书
财会自我鉴定范文
2013/12/27 职场文书
《藏戏》教学反思
2014/02/11 职场文书
高中军训感言600字
2014/03/11 职场文书
俞敏洪励志演讲稿
2014/04/29 职场文书
2014优秀党员事迹材料
2014/08/14 职场文书
党员考试作弊检讨书1000字
2015/02/16 职场文书
常住证明范本
2015/06/23 职场文书
2016年小学生新年寄语
2015/08/18 职场文书
浅谈pytorch中的dropout的概率p
2021/05/27 Python