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 相关文章推荐
可用于监控 mysql Master Slave 状态的python代码
Feb 10 Python
Python中isnumeric()方法的使用简介
May 19 Python
好用的Python编辑器WingIDE的使用经验总结
Aug 31 Python
go和python变量赋值遇到的一个问题
Aug 31 Python
Python文件如何引入?详解引入Python文件步骤
Dec 10 Python
对python文件读写的缓冲行为详解
Feb 13 Python
python实现倒计时小工具
Jul 29 Python
Python和Anaconda和Pycharm安装教程图文详解
Feb 04 Python
python实现微信打飞机游戏
Mar 24 Python
如何利用Python给自己的头像加一个小国旗(小月饼)
Oct 02 Python
python3中数组逆序输出方法
Dec 01 Python
python 第三方库paramiko的常用方式
Feb 20 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中记录用户访问过的产品,在cookie记录产品id,id取得产品信息
2011/05/04 PHP
php提示无法加载或mcrypt没有找到 PHP 扩展 mbstring解决办法
2012/03/27 PHP
PHP简单实现数字分页功能示例
2016/08/24 PHP
php获取微信openid方法总结
2019/10/10 PHP
jquery的颜色选择插件实例代码
2008/10/02 Javascript
javascript 自定义事件初探
2009/08/21 Javascript
初窥JQuery(二)事件机制(2)
2010/12/06 Javascript
autoIMG 基于jquery的图片自适应插件代码
2011/03/12 Javascript
浅析ajax请求json数据并用js解析(示例分析)
2013/07/13 Javascript
取消选中单选框radio的三种方式示例介绍
2013/12/23 Javascript
分享28款免费实用的 JQuery 图片和内容滑块插件
2014/12/15 Javascript
node.js中的fs.readdir方法使用说明
2014/12/17 Javascript
jQuery遍历节点树方法分析
2016/09/08 Javascript
JS 组件系列之Bootstrap Table的冻结列功能彻底解决高度问题
2017/06/30 Javascript
Angularjs的启动过程分析
2017/07/18 Javascript
详解使用nvm管理多版本node的方法
2017/08/30 Javascript
Vue 按键修饰符处理事件的方法
2018/05/04 Javascript
vue2.0 下拉框默认标题设置方法
2018/08/22 Javascript
Vue项目中使用WebUploader实现文件上传的方法
2019/07/21 Javascript
webpack.DefinePlugin与cross-env区别详解
2020/02/23 Javascript
解决Vue-cli无法编译es6的问题
2020/10/30 Javascript
python实现求两个字符串的最长公共子串方法
2018/07/20 Python
基于Python对数据shape的常见操作详解
2018/12/25 Python
sklearn线性逻辑回归和非线性逻辑回归的实现
2020/06/09 Python
TensorFlow-gpu和opencv安装详细教程
2020/06/30 Python
轻松制作精彩视频:Animoto
2018/09/19 全球购物
世界上最受欢迎的花店:1-800-Flowers.com
2020/06/01 全球购物
加拿大领先家居家具网上购物:Aosom.ca
2020/05/27 全球购物
美德好少年主要事迹
2014/01/29 职场文书
广告语设计及教案
2014/03/21 职场文书
《鹬蚌相争》教学反思
2014/04/22 职场文书
住房租房协议书
2014/08/20 职场文书
职称评定个人总结
2015/03/05 职场文书
公司员工体检通知
2015/04/21 职场文书
品德与社会教学反思
2016/02/24 职场文书
Spring Cloud Netflix 套件中的负载均衡组件 Ribbon
2022/04/13 Java/Android