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中cPickle用法例子分享
Jan 03 Python
详解python的数字类型变量与其方法
Nov 20 Python
Python实现自动登录百度空间的方法
Jun 10 Python
Python单元测试实例详解
May 25 Python
django框架之cookie/session的使用示例(小结)
Oct 15 Python
Python 确定多项式拟合/回归的阶数实例
Dec 29 Python
pandas修改DataFrame列名的实现方法
Feb 22 Python
python获取磁盘号下盘符步骤详解
Jun 19 Python
用python3 返回鼠标位置的实现方法(带界面)
Jul 05 Python
python+tifffile之tiff文件读写方式
Jan 13 Python
Python中格式化字符串的四种实现
May 26 Python
python如何运行js语句
Sep 09 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 filter_var() 函数 Filter 函数
2012/04/25 PHP
基于PHP输出缓存(output_buffering)的深入理解
2013/06/13 PHP
PHP简单选择排序算法实例
2015/01/26 PHP
thinkphp3.2实现在线留言提交验证码功能
2017/07/19 PHP
PHP折半(二分)查找算法实例分析
2018/05/12 PHP
showModelessDialog()使用详解
2006/09/21 Javascript
在html页面中包含共享页面的方法
2008/10/24 Javascript
js的.innerHTML = ""IE9下显示有错误的解决方法
2013/09/16 Javascript
jQuery函数的第二个参数获取指定上下文中的DOM元素
2014/05/19 Javascript
JQuery选择器、过滤器大整理
2015/05/26 Javascript
jQuery使用$.ajax提交表单完整实例
2015/12/11 Javascript
jQuery Dialog对话框事件用法实例分析
2016/05/10 Javascript
基于jQuery ligerUI实现分页样式
2016/09/18 Javascript
JS字符串统计操作示例【遍历,截取,输出,计算】
2017/03/27 Javascript
详解设置Webstorm 利用babel将ES6自动转码成ES5
2017/12/20 Javascript
安装Node.js并启动本地服务的操作教程
2018/05/12 Javascript
typescript nodejs 依赖注入实现方法代码详解
2019/07/21 NodeJs
Vue文本模糊匹配功能如何实现
2020/07/30 Javascript
Python中使用支持向量机(SVM)算法
2017/12/26 Python
python调用系统ffmpeg实现视频截图、http发送
2018/03/06 Python
Python爬虫工程师面试问题总结
2018/03/22 Python
numpy.linspace 生成等差数组的方法
2018/07/02 Python
Python常见的pandas用法demo示例
2019/03/16 Python
Python中单线程、多线程和多进程的效率对比实验实例
2019/05/14 Python
python从入门到精通 windows安装python图文教程
2019/05/18 Python
CSS3 transition 实现通知消息轮播条
2020/10/14 HTML / CSS
美国著名的婴儿学步鞋老品牌:Robeez
2016/08/20 全球购物
印度尼西亚值得信赖的第一家网店:Bhinneka
2018/07/16 全球购物
小学端午节活动方案
2014/03/13 职场文书
研究生导师推荐信
2014/09/06 职场文书
协议书范文
2015/01/27 职场文书
社区活动总结
2015/02/04 职场文书
2015年销售员工作总结范文
2015/04/07 职场文书
2015年教务处干事工作总结
2015/07/22 职场文书
关于国庆节的广播稿
2015/08/19 职场文书
聊聊JS ES6中的解构
2021/04/29 Javascript