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连接MySQL、MongoDB、Redis、memcache等数据库的方法
Nov 15 Python
利用soaplib搭建webservice详细步骤和实例代码
Nov 20 Python
Python爬虫辅助利器PyQuery模块的安装使用攻略
Apr 24 Python
python通过getopt模块如何获取执行的命令参数详解
Dec 29 Python
matplotlib绘制动画代码示例
Jan 02 Python
使用Django启动命令行及执行脚本的方法
May 29 Python
使用Python抓取豆瓣影评数据的方法
Oct 17 Python
使用pandas读取文件的实现
Jul 31 Python
Python迷宫生成和迷宫破解算法实例
Dec 24 Python
Python安装依赖(包)模块方法详解
Feb 14 Python
如何使用PyCharm引入需要使用的包的方法
Sep 22 Python
Python classmethod装饰器原理及用法解析
Oct 17 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获取163、gmail、126等邮箱联系人地址【已测试2009.10.10】
2009/10/11 PHP
解析php中array_merge与array+array的区别
2013/06/21 PHP
php5.3不能连接mssql数据库的解决方法
2014/12/27 PHP
php类自动装载、链式操作、魔术方法实现代码
2017/07/23 PHP
PHP 文件锁与进程锁的使用示例
2017/08/07 PHP
PHP实现简单用户登录界面
2019/10/23 PHP
用javascript实现无刷新更新数据的详细步骤 asp
2006/12/26 Javascript
初学JavaScript第二章
2008/09/30 Javascript
JSON无限折叠菜单编写实例
2013/12/16 Javascript
详解JavaScript中undefined与null的区别
2014/03/29 Javascript
JavaScript中一个奇葩的IE浏览器判断方法
2014/04/16 Javascript
11种ASP连接数据库的方法
2015/09/18 Javascript
javascript 单例模式详解及简单实例
2017/02/14 Javascript
jQuery实现三级联动效果
2017/03/02 Javascript
AngularJs 终极购物车(实例讲解)
2017/11/08 Javascript
详解NODEJS的http实现
2018/01/04 NodeJs
vue移动端监听滚动条高度的实现方法
2018/09/03 Javascript
使用jQuery如何写一个含验证码的登录界面
2019/05/13 jQuery
通过实例了解js函数中参数的传递
2019/06/15 Javascript
python制作爬虫并将抓取结果保存到excel中
2016/04/06 Python
Python基于回溯法子集树模板解决选排问题示例
2017/09/07 Python
啥是佩奇?使用Python自动绘画小猪佩奇的代码实例
2019/02/20 Python
python等待10秒执行下一命令的方法
2020/07/19 Python
CSS3中媒体查询结合rem布局适配手机屏幕
2019/06/10 HTML / CSS
LocalStorage记住用户和密码功能
2017/07/24 HTML / CSS
丝芙兰中国官方商城:SEPHORA中国
2018/01/10 全球购物
Omio葡萄牙:全欧洲低价大巴、火车和航班搜索和比价
2019/02/09 全球购物
法国房车租赁网站:Yescapa
2019/08/26 全球购物
C#实现启动一个进程
2016/10/01 面试题
你们项目是如何进行变更控制的
2015/08/26 面试题
千元咖啡店的创业计划书范文
2013/12/29 职场文书
英语求职信范文
2014/05/23 职场文书
运动员入场词
2015/07/18 职场文书
python爬取企查查企业信息之selenium自动模拟登录企查查
2021/04/08 Python
SpringBoot连接MySQL获取数据写后端接口的操作方法
2021/11/02 MySQL
nginx 添加http_stub_status_module模块
2022/05/25 Servers