首頁  >  文章  >  後端開發  >  Python如何使用Requests請求網頁

Python如何使用Requests請求網頁

WBOY
WBOY轉載
2023-04-25 09:29:011684瀏覽

Requests 繼承了urllib2的所有特性。

Requests支援HTTP連線保持和連線池,支援使用cookie保持會話,支援檔案上傳,支援自動決定回應內容的編碼,支援國際化的 URL 和 POST 資料自動編碼。

安裝方式

利用pip 安裝

$ pip install requests

GET請求

基本GET請求(headers參數和parmas參數)

1.最基本的GET請求可以直接用get方法'

response = requests.get("http://www.baidu.com/")
 
# 也可以这么写
# response = requests.request("get", "http://www.baidu.com/")

2.新增headers 和查詢參數

如果想加入headers,可以傳入headers參數來增加請求頭中的headers資訊。

如果要將參數放在url中傳遞,可以利用 params 參數。

import requests
 
kw = {'wd':'长城'}
 
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"}
 
# params 接收一个字典或者字符串的查询参数,字典类型自动转换为url编码,不需要urlencode()
response = requests.get("http://www.baidu.com/s?", params = kw, headers = headers)
 
# 查看响应内容,response.text 返回的是Unicode格式的数据
print (response.text)
 
# 查看响应内容,response.content返回的字节流数据
print (respones.content)
 
# 查看完整url地址
print (response.url)
 
# 查看响应头部字符编码
print (response.encoding)
 
# 查看响应码
print (response.status_code)

運行結果

......
 
......
 
'http://www.baidu .com/s?wd=長城'
 
'utf-8'
 
#200

使用response.text 時,Requests 會基於HTTP 回應的文字編碼自動解碼回應內容,大多數Unicode 字元集都能無縫解碼。

使用response.content 時,傳回的是伺服器回應資料的原始二進位位元組流,可以用來保存圖片等二進位檔案。

POST方法

1.基本的POST的請求

response = requests.post("http://www.baidu.com/",data = data)

2.body帶參數##

formdata = {
    "type": "AUTO",
    "doctype": "json",
    "key": "www",
    "ue": "UTF-8",
}
url = "http://auto-installment/v1/loan-credit-check"
response = requests.post(url,data = data,headers=headers)
 
print(response.text)#显示返回结果
print(response.json())# 如果是json文件可以直接显示

注意:

列印的結果出現中文亂碼,使用json.dupms(response, ensure_ascii=False))解決

Session

#一般利用Session在跨請求的時候保持某些參數,例如實現登入後才能存取其他頁面

# 1. 创建session对象,可以保存Cookie值
session = requests.session()
 
# 2. 需要登录的用户名和密码
data = {"username": "mxxxx", "password": "1233444"}
 
# 3. 发送附带用户名和密码的请求,并获取登录后的Cookie值,保存在ssion里
session.post("https://www.jianshu.com/sign_in", data=data)
 
# 4. ssion包含用户登录后的Cookie值,可以直接访问那些登录后才可以访问的页面
response = session.get("https://www.jianshu.com/writer#/")

踩坑記要

1.在使用requests去請求一個介面時,出現報錯的情況,但是這個介面本身卻沒有問題。 這是因為介面的請求參數有兩種情況:簡單型別(一般少於3個)和複雜物件類型。

解決方法:在headers中定義這兩個參數的類型

簡單類型:headers={"Content-Type": "application/x-www-form-urlencoded"}

複雜物件類型:headers={"Content-Type":application/json}

2.某些HTTPS請求存在SSL憑證驗證

#解決方法:response = requests.get("https://www.baidu.com/", verify=False)

擴充

1.requests請求失敗後,增加重試機制(若失敗,將會重試3次)

request_retry = requests.adapatrs.HTTPAdapaters(max_retries=3)
session.mount('https://',request_retry)

#2.使用grequests實作非同步請求

urls = [
    'http://www.url1.com',
    'http://www.url2.com',
    'http://www.url3.com',
    'http://www.url4.com',
    'http://www.url5.com',
]
resp = (grequests.get(u) for u in urls)
grequests.map(resp)

#3.自訂cookies

我們使用Session實例來保持請求之間的cookies,但是有些特殊情況,需要使用自訂的cookies

我們使用Session實例來保持請求之間的cookies,但是有些特殊情況,需要使用自訂的cookies

# 自定义cookies
cookie = {'guid':'5BF0FAB4-A7CF-463E-8C17-C1576fc7a9a8','uuid':'3ff5f4091f35a467'}
 
session.post('http://', cookies=cookie)

4.統計一個API請求花費的時間

session.get(url).elapsed.total_seconds()

5.設定請求逾時

session.get(url, timeout=15)

6.檔案上傳

Requests利用files作為參數模擬提交檔案資料

file = {'file':open('test.bmp','rb')}   #rb表示用二进制格式打开指定目录下的文件,且用于只读
r =requests.post('http://',files=file)
print(r.text)

以上是Python如何使用Requests請求網頁的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:yisu.com。如有侵權,請聯絡admin@php.cn刪除