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 18 Python
浅谈python类属性的访问、设置和删除方法
Jul 25 Python
python中字符串类型json操作的注意事项
May 02 Python
windows下安装python的C扩展编译环境(解决Unable to find vcvarsall.bat)
Feb 21 Python
Python基于opencv的图像压缩算法实例分析
May 03 Python
对Python3之方法的覆盖与super函数详解
Jun 26 Python
Pycharm+django2.2+python3.6+MySQL实现简单的考试报名系统
Sep 05 Python
Python常用数据类型之间的转换总结
Sep 06 Python
Python爬虫库BeautifulSoup的介绍与简单使用实例
Jan 25 Python
tensorflow 实现从checkpoint中获取graph信息
Feb 10 Python
文件上传服务器-jupyter 中python解压及压缩方式
Apr 22 Python
python如何写出表白程序
Jun 01 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
层叠菜单的动态生成
2006/10/09 PHP
php字符串分割函数用法实例
2015/03/17 PHP
Laravel框架路由设置与使用示例
2018/06/12 PHP
javascript:history.go()和History.back()的区别及应用
2012/11/25 Javascript
JavaScript中的变量定义与储存介绍
2014/12/31 Javascript
JavaScript日期类型的一些用法介绍
2015/03/02 Javascript
JavaScript把数组作为堆栈使用的方法
2015/03/20 Javascript
jquery+html5时钟特效代码分享(可设置闹钟并且语音提醒)
2020/03/30 Javascript
js实现简单的验证码
2015/12/25 Javascript
JavaScript+canvas实现七色板效果实例
2016/02/18 Javascript
浅谈jQuery为哪般去掉了浏览器检测
2016/08/29 Javascript
js面向对象实现canvas制作彩虹球喷枪效果
2016/09/24 Javascript
基于bootstrap实现收缩导航条
2017/03/17 Javascript
微信小程序云开发之新手环境配置
2019/05/16 Javascript
angular组件间通讯的实现方法示例
2020/05/07 Javascript
ES6函数和数组用法实例分析
2020/05/23 Javascript
Python求均值,方差,标准差的实例
2019/06/29 Python
python爬虫神器Pyppeteer入门及使用
2019/07/13 Python
Python封装成可带参数的EXE安装包实例
2019/08/24 Python
Python中的上下文管理器相关知识详解
2019/09/19 Python
如何基于python生成list的所有的子集
2019/11/11 Python
解析PyCharm Python运行权限问题
2020/01/08 Python
通过实例解析Python return运行原理
2020/03/04 Python
将 Ubuntu 16 和 18 上的 python 升级到最新 python3.8 的方法教程
2020/03/11 Python
Python如何操作office实现自动化及win32com.client的运用
2020/04/01 Python
高中生毕业自我鉴定范文
2013/12/22 职场文书
医院实习介绍信
2014/01/12 职场文书
会计与出纳自荐书范文
2014/03/16 职场文书
三项教育活动实施方案
2014/03/30 职场文书
中国梦团日活动总结
2014/07/07 职场文书
助学贷款贫困证明
2014/09/23 职场文书
领导批评与自我批评范文
2014/10/16 职场文书
2015年九一八事变纪念日演讲稿
2015/03/19 职场文书
Nginx反向代理多个服务器的实现方法
2021/03/31 Servers
SpringBoot中使用Redis作为全局锁示例过程
2022/03/24 Java/Android
MySQL 原理与优化之Update 优化
2022/08/14 MySQL