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打開來獲取圖片大小。

相關文章
相關標籤/搜索