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获取电脑硬件信息及状态的实现方法
Aug 29 Python
python基于socket实现网络广播的方法
Apr 29 Python
python实现的简单窗口倒计时界面实例
May 05 Python
python批量添加zabbix Screens的两个脚本分享
Jan 16 Python
Python3 适合初学者学习的银行账户登录系统实例
Aug 08 Python
TF-IDF与余弦相似性的应用(一) 自动提取关键词
Dec 21 Python
python实时监控cpu小工具
Jun 21 Python
Python面向对象多态实现原理及代码实例
Sep 16 Python
python3爬虫中多线程的优势总结
Nov 24 Python
python解包用法详解
Feb 17 Python
超级详细实用的pycharm常用快捷键
May 12 Python
Python中第三方库Faker的使用详解
Apr 02 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/07 PHP
php定期拉取数据对比方法实例
2019/09/22 PHP
浅析Js中的单引号与双引号问题
2013/11/06 Javascript
通过复制Table生成word和excel的javascript代码
2014/01/20 Javascript
浅谈jQuery事件绑定原理
2015/01/02 Javascript
基于jQuery+Cookie实现的防止刷新的在线考试倒计时
2015/06/19 Javascript
jQuery密码强度检测插件passwordStrength用法实例分析
2015/10/30 Javascript
前端程序员必须知道的高性能Javascript知识
2016/08/24 Javascript
JS实现数组去重方法总结(六种方法)
2017/07/14 Javascript
javascript中new Array()和var arr=[]用法区别
2017/12/01 Javascript
详解基于vue-cli3快速发布一个fullpage组件
2019/03/08 Javascript
详解微信小程序获取当前时间及日期的方法
2019/04/28 Javascript
jQuery列表动态增加和删除的实现方法
2020/11/05 jQuery
简述:我为什么选择Python而不是Matlab和R语言
2017/11/14 Python
python微信公众号开发简单流程
2018/03/23 Python
python调用Matplotlib绘制分布点并且添加标签
2018/05/31 Python
Python之list对应元素求和的方法
2018/06/28 Python
利用python画出折线图
2018/07/26 Python
在python中按照特定顺序访问字典的方法详解
2018/12/14 Python
python-tkinter之按钮的使用,开关方法
2019/06/11 Python
Django 自定义权限管理系统详解(通过中间件认证)
2020/03/11 Python
使用python脚本自动生成K8S-YAML的方法示例
2020/07/12 Python
PyTorch安装与基本使用详解
2020/08/31 Python
html5用video标签流式加载的实现
2020/05/20 HTML / CSS
Canvas 文本填充线性渐变的使用详解
2020/06/22 HTML / CSS
NFL欧洲商店(德国):NFL Europe Shop DE
2018/11/03 全球购物
英国奢侈品在线精品店:Hervia
2020/09/03 全球购物
介绍一下SQL Server里面的索引视图
2016/07/31 面试题
C#里面可以避免一个类被其他类继承么?如何?
2013/09/26 面试题
秋季运动会稿件
2014/01/30 职场文书
党的群众路线学习材料
2014/05/16 职场文书
家具公司总经理岗位职责
2014/07/08 职场文书
优秀中职教师事迹材料
2014/08/26 职场文书
学生打架检讨书
2014/10/20 职场文书
消防宣传标语大全
2015/08/03 职场文书
Pygame Draw绘图函数的具体使用
2021/11/17 Python