前面我们讲过了urllib模块,知道他是用于网络请求的,这一节讲的requests还是用于网络请求的,只不过urllib是官方模块,而requests是第三方的模块。用过的人都说他才是’人类使用的’,哈哈,我也没觉得urllib有多么尿性啊!下面我们试着回归人类的生活吧。

这是第三方的模块,所以需要手动安装,安装过程在此不表,请度娘查之。

1.首先我们导入模块:

import requests

2.请求url:

get请求:

 r = requests.get('https://www.baidu.com')

带参数的get请求:

params = {'k1':'v1','k2':'v2'}
r = requests.get('https://www.baidu.com',params=params)
print(r.url) https://www.baidu.com?k1=1&k2=v2 post请求: r = requests.post('https://www.baidu.com',data={'k1':'v1'})

上面传递的参数是字典,我们也可以传递json类型的参数:

import requests
import json params = {'k1':'v1','k2':'v2'} url = 'http://www.baidu.com'
requests.post(url,json.dump(params))

因为发送json格式太常见,requests模块已经为我们集成了json格式的数据,而不用我们引入json模块:

import requests

params = {'k1':'v1','k2':'v2'}

url = 'http://www.baidu.com'
requests.post(url,json=params)

下面还有更厉害的,如果我们想post一个文件怎么办呢,哈哈requests一样可以做到的:

import requests

url = 'http://www.baidu.com'

file = {'f':('test.txt',open('test.xls','rb'),'application/nnd.ms-excel',{'Expires':'0'})} #指定文件名等信息
requests.post(url,files=file) 如果你发送一个非常大的文件作为 multipart/form-data 请求,你可能希望将请求做成数据流。默认下 requests 不支持, 但有个第三方包 requests-toolbelt 是支持的。 import requests
from requests_toolbelt.multipart.encoder import MultipartEncoder m = MultipartEncoder(
fields={'field0': 'value', 'field1': 'value',
'field2': ('filename', open('file.py', 'rb'), 'text/plain')}
) r = requests.post('http://httpbin.org/post', data=m,
headers={'Content-Type': m.content_type})

3.获取响应信息

import requests

url = 'http://www.baidu.com'
resp = requests.post(url)
print(resp.text)
#如果这里你打印text是乱码那就是字符编码的问题啦
#你可以手动设置编码格式:
resp.encoding = 'UTF-8' print('--------------------------------')
print(resp.content)
print('--------------------------------')
print(resp.headers)
print('--------------------------------')
print(resp.url)

text会以带格式的文本显示请求地址的网页源码,content响应的是二进制响应体。headers显示请求头信息,url显示该次请求的url。当然还有很多方法,在此不一一细说,感兴趣大家下去过一遍。

4.对压缩格式的相应内容自动解压缩

对于gzip和deflate格式的响应数据Requests会自动解码。

我们还是以豆瓣网为例,豆瓣的返回格式是gzip的,如果使用urllib的话需要我们手动调用gzip模块进行解压缩。

import urllib.request,urllib.parse
import gzip url = 'https://www.douban.com/' header = {
'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'Accept-Encoding':'gzip, deflate, sdch, br',
'Accept-Language':'zh-CN,zh;q=0.8',
'Cache-Control':'max-age=0',
'Connection':'keep-alive',
'Host':'www.douban.com',
'Upgrade-Insecure-Requests':'1',
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36'
} resp = urllib.request.Request(url,headers=header) print(resp) data = urllib.request.urlopen(resp)
data = data.read()
data = gzip.decompress(data).decode('UTF-8') #从请求头Accept-Encoding中看到网页被压缩过,所以需要解压缩
print(data)

现在有了Requests这个操作就大大缩水了:

import requests

url = 'https://www.douban.com/'

header = {
'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'Accept-Encoding':'gzip, deflate, sdch, br',
'Accept-Language':'zh-CN,zh;q=0.8',
'Cache-Control':'max-age=0',
'Connection':'keep-alive',
'Host':'www.douban.com',
'Upgrade-Insecure-Requests':'1',
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36'
} resp = requests.post(url,header)
print(resp.text)

不需要手动解压,Requests已经帮我们做了判断。

5.json响应内容☆☆☆

Requests 中也有一个内置的 JSON 解码器,助你处理 JSON 数据:

import requests

r = requests.get('http://www.tianyancha.com/v2/industryGuobiao.json')
print(r.json())

6.Cookie

如果某个响应中包含一些 cookie,你可以快速访问它们:

url = 'http://example.com/some/cookie/setting/url'
r = requests.get(url)
r.cookies['example_cookie_name']

要想发送你的cookies到服务器,可以使用 cookies 参数:

cookies = dict(cookies_are='working')
r = requests.get(url, cookies=cookies)

python3学习-requests使用的更多相关文章

  1. 2018-2019-2 20189206 Python3学习

    python3简明教程学习 基本概念 脚本文件: 脚本文件英文为Script.实际上脚本就是程序,一般都是由应用程序提供的编程语言.应用程序包括浏览器(javaScript.VBScript).多媒体 ...

  2. python3使用requests登录人人影视网站

    python3使用requests登录人人影视网站 继续练习使用requests登录网站,人人影视有一项功能是签到功能,需要每天登录签到才能升级. 下面的代码python代码实现了使用requests ...

  3. Python3学习(3)-高级篇

    Python3学习(1)-基础篇 Python3学习(2)-中级篇 Python3学习(3)-高级篇 文件读写 源文件test.txt line1 line2 line3 读取文件内容 f = ope ...

  4. Python3学习(2)-中级篇

    Python3学习(1)-基础篇 Python3学习(2)-中级篇 Python3学习(3)-高级篇 切片:取数组.元组中的部分元素 L=['Jack','Mick','Leon','Jane','A ...

  5. Python3学习(1)-基础篇

    Python3学习(1)-基础篇 Python3学习(2)-中级篇 Python3学习(3)-高级篇 安装(MAC) 直接运行: brew install python3 输入:python3 --v ...

  6. Python3学习笔记(urllib模块的使用)转http://www.cnblogs.com/Lands-ljk/p/5447127.html

    Python3学习笔记(urllib模块的使用)   1.基本方法 urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None,  ...

  7. python3使用requests发闪存

    闪存ing.cnblogs.com是博客园类似推特.饭否的服务, 我写了以下程序可以完成发闪存的操作,目的是顺便练习使用requests库. requests是一个python 轻量的http客户端库 ...

  8. Python3学习笔记 - 准备环境

    前言 最近乘着项目不忙想赶一波时髦学习一下Python3.由于正好学习了Docker,并深深迷上了Docker,所以必须趁热打铁的用它来创建我们的Python3的开发测试环境.Python3的中文教程 ...

  9. Python3学习之路~0 目录

    目录 Python3学习之路~2.1 列表.元组操作 Python3学习之路~2.2 简单的购物车程序 Python3学习之路~2.3 字符串操作 Python3学习之路~2.4 字典操作 Pytho ...

随机推荐

  1. css实现超出文本溢出用省略号代替

    一.单行 实现单行文本的溢出显示省略号使用text-overflow:ellipsis属性,但需要配合使用另外两个属性使用才能达到效果. 如下: overflow:hidden; text-overf ...

  2. redis RDB 和AOF

    参考文献 Redis源码学习-AOF数据持久化原理分析(0) Redis源码学习-AOF数据持久化原理分析(1) Redis · 特性分析 · AOF Rewrite 分析 深入剖析 redis AO ...

  3. C++智能指针的几种用法

    auto在c++11中已经弃用. 一.auto_ptr模板 auto_ptr与shared_ptr.unique_ptr都定义了类似指针的对象,可以将new到的地址赋给这一对象,当智能指针过期时,析构 ...

  4. webpack4基础入门操作(一)

    基于webpack4实践:开始:打开控制面板,制定到创建Webpack的文件夹. 并创建初始配置文件package.json 输入命令:npm init -y,在文件夹中出现一个package.jso ...

  5. 赛前集训的第二个小总结(OI生涯盛极必衰orNOIP前最后试炼?)+关于学OI目的的思考

    这次只有成绩统计是全的…… 看上去好像还是挺跌宕起伏的啊…… 话说亲爱的教练员又一次食言了,说好的10次就换呢?! 名次表只有前10次的了…… 不得不说前10次还是挺好的,10次考试,7次前十,5次前 ...

  6. 学习2:内容# 1.while # 2.字符串格式化 # 3.运算符 # 4.编码初始

    目录 1.while循环 2.字符串格式化 3.运算符 4.编码初始 1.while循环 while -- 关键字 (死循环) if 条件: 结果 while 条件: 循环体 while True: ...

  7. Linux磁盘与分区

    正在从新装载虚拟机,碰到磁盘分区一阵头大,花了一下午对分区的基本原理做了一个梳理   一.磁盘   硬盘内部结构:

  8. [记录]Nginx配置实现&&和||的方法实例

    Nginx配置文件中if的&&和||的实现(nginx不支持&&和||的写法) 1.与(&&)的写法: set $condiction '';if ($ ...

  9. Netty-Pipeline深度解析

    首先我们知道,在NIO网络编程模型中,IO操作直接和channel相关,比如客户端的请求连接,或者向服务端发送数据, 服务端都要从客户端的channel获取这个数据 那么channelPipeline ...

  10. OnCommandStateChange 不响应

    原因是我把原先的OnCommandStateChange( long nCommand, BOOL bEnable )大BOOL改成了小bool,回调不认识了.