Requests(一)GET

Requests是Python语言的一个很是赞的第三方库。相比较urllib,它的使用更加简单。且,Requests模块对于py2与py3都是完美兼容通吃的。python

Requests 继承了urllib的全部特性。Requests支持HTTP链接保持和链接池,支持使用cookie保持会话,支持文件上传,支持自动肯定响应内容的编码,支持国际化的 URL 和 POST 数据自动编码。服务器

1. requests的安装

通常,对于requests的安装,我我的会比较习惯于安装在一个独立的虚拟环境中。 虽说,它对py2跟py3都很友好。cookie

进入咱们所须要安装的环境中,而后执行如下命令:网络

pip install requests

若是,你也与我同样喜欢安装到独立的环境中,那必定要切记,不要使用sudo安装,使用sudo会直接安装到大环境中。ide

2. 初识requests之GET请求

  • 最基本的GET请求能够直接用get方法
import request

 response = requests.get("http://www.baidu.com")

就是这样,很简单的一行代码,咱们就获得了一个请求页面对象。编码

  • 固然,咱们还须要给它添加上头信息。
import requests

 url = "https://www.baidu.com"

 headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36"
}
response = requests.get(url=url, headers=headers)
  • 对于GET请求中参数添加
import requests

 # 这里的 /s? 是指GET请求中,后面带有请求参数
url = "https://www.baidu.com/s?"  

 # 指定GET请求的参数,字典格式。
params = {"wd": "Python"}

 # 请求头信息(还能够添加其余头信息,都以K , V的格式添加到字典中)
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36"
}

 response = requests.get(url=url, headers=headers, params=params)

 # 查看url
print(response.url)  

 # 查看响应头部字符编码
print (response.encoding)

 # 查看响应码
print (response.status_code)

 # 查看响应内容,response.text 返回的数据,是根据服务器的编码格式自动解析后的数据(不太稳定)
print (response.text)

 # 查看响应内容,response.content返回的byes类型数据
print (respones.content)

 # 若是咱们想要返回的数据是字符串类型,那么只须要decode一下就OK了
# decode(“编码”)中,咱们能够写入编码格式。(如:utf8, GBK等)
print(response.content.decode())

使用response.text 时,Requests 会基于 HTTP 响应的文本编码自动解码响应内容,大多数 Unicode 字符集都能被无缝地解码。url

使用response.content 时,返回的是服务器响应数据的原始二进制数据,咱们能够用来保存图片等二进制文件。code

3. 使用GET请求获取网络图片的大小

import requests
from io import BytesIO,StringIO
import requests
from PIL import Image
img_url = "http://docs.python-requests.org/zh_CN/latest/_static/requests-sidebar.png"
response = requests.get(img_url)
f = BytesIO(response.content)
img = Image.open(f)
print(img.size)

其输出结果: (500, 262)对象

不少时候,数据读写不必定是文件,也能够在内存中读写。继承

顾名思义:

StringIO就是在内存中读写str。

BytesIO 就是在内存中读写bytes类型的二进制数据.

例子中若是使用StringIO 即f = StringIO(response.text)会产生"cannot identify image file"的错误。 固然上述例子也能够把图片存到本地以后再使用Image打开来获取图片大小。

相关文章
相关标签/搜索