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写的Tkinter程序屏幕居中方法
Mar 10 Python
使用C语言来扩展Python程序和Zope服务器的教程
Apr 14 Python
浅谈django model的get和filter方法的区别(必看篇)
May 23 Python
vscode 配置 python3开发环境的方法
Sep 19 Python
解决安装pyqt5之后无法打开spyder的问题
Dec 13 Python
Python 实现判断图片格式并转换,将转换的图像存到生成的文件夹中
Jan 13 Python
python发qq消息轰炸虐狗好友思路详解(完整代码)
Feb 15 Python
Pycharm中使用git进行合作开发的教程详解
Nov 17 Python
在pyCharm中下载第三方库的方法
Apr 18 Python
Python爬虫基础讲解之请求
May 13 Python
聊聊Python中关于a=[[]]*3的反思
Jun 02 Python
Python机器学习应用之基于线性判别模型的分类篇详解
Jan 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支持的协议与封装协议总结(推荐)
2017/11/17 PHP
PHP实现动态删除XML数据的方法示例
2018/03/30 PHP
javascript之水平横向滚动歌词同步的应用
2007/05/07 Javascript
在Node.js中实现文件复制的方法和实例
2014/06/05 Javascript
select多选 multiple的使用示例
2014/06/16 Javascript
javascript结合CSS实现苹果开关按钮特效
2015/04/07 Javascript
关于JavaScript的变量的数据类型的判断方法
2015/08/14 Javascript
JavaScript+html5 canvas绘制的圆弧荡秋千效果完整实例
2016/01/26 Javascript
JQuery插件Marquee.js实现无缝滚动效果
2016/04/26 Javascript
jQuery的extend方法【三种】
2016/12/14 Javascript
Angularjs的$http异步删除数据详解及实例
2017/07/27 Javascript
nodejs操作mongodb的增删改查功能实例
2017/11/09 NodeJs
javascript字体颜色控件的开发 JS实现字体控制
2017/11/27 Javascript
Vue引入jquery实现平滑滚动到指定位置
2018/05/09 jQuery
vue 2.8.2版本配置刚进入时候的默认页面方法
2018/09/21 Javascript
Vue中点击active并第一个默认选中功能的实现
2020/02/24 Javascript
ES6中的类(Class)示例详解
2020/12/09 Javascript
[01:09]DOTA2次级职业联赛 - 99战队宣传片
2014/12/01 DOTA
Python Web框架Flask中使用百度云存储BCS实例
2015/02/08 Python
Django 添加静态文件的两种实现方法(必看篇)
2017/07/14 Python
Python3生成手写体数字方法
2018/01/30 Python
ERLANG和PYTHON互通实现过程详解
2019/07/05 Python
Python连接Oracle之环境配置、实例代码及报错解决方法详解
2020/02/11 Python
Python进程Multiprocessing模块原理解析
2020/02/28 Python
python3 使用traceback定位异常实例
2020/03/09 Python
python时间序列数据转为timestamp格式的方法
2020/08/03 Python
早晨薰衣草在线女性精品店:Morning Lavender
2021/01/04 全球购物
护士实习自我鉴定
2013/10/22 职场文书
环保建议书400字
2014/05/14 职场文书
学生干部培训方案
2014/06/12 职场文书
2014基建处领导班子“四风”对照检查材料思想汇报
2014/10/04 职场文书
单位工资证明范本
2015/06/12 职场文书
员工旷工检讨书
2015/08/15 职场文书
Django项目如何正确配置日志(logging)
2021/04/29 Python
mysql幻读详解实例以及解决办法
2022/06/16 MySQL
mysql sock 文件解析及作用讲解
2022/07/15 MySQL