Requests模塊介紹:
發送http請求,獲取響應數據
requests模塊是一個第三方模塊,需要在你的python(虛擬)環境中額外安裝:
pip/pip3 install requests
requests基礎:
requests模塊發送get請求
Response響應對象:
觀察上邊代碼運行結果發現,有好多亂碼;這是因為編解碼使用的字符集不同造成的;我們嘗試使用下邊的辦法來解決中文亂碼問題
import requests
url = 'https://www.baidu.com'
# 向目標url發送get請求
response = requests.get(url)
# 打印響應內容
# print(response.text)
print(response.content.decode()) # 注意這里!
1、response.text是requests模塊按照chardet模塊推測出的編碼字符集進行解碼的結果
2、網絡傳輸的字符串都是bytes類型的,所以response.text = response.content.decode(‘推測出的編碼字符集’)
3、我們可以在網頁源碼中搜索charset,嘗試參考該編碼字符集,注意存在不準確的情況。
Response.text 和Response.content的區別:
1、Response.text
2、Response.content
解決中文亂碼:
通過對response.content進行decode,來解決中文亂碼
1、Response.content.decode() 默認utf-8
2、Response.content.decode("GBK")
utf-8
gbk
gb2312
ascii (讀音:阿斯克碼)
iso-8859-1
Response響應對象的其它常用屬性或方法:
#https://beishan.blog.csdn.net/
# 1.2.3-response其它常用屬性
import requests
# 目標url
url = 'https://www.baidu.com'
# 向目標url發送get請求
response = requests.get(url)
# 打印響應內容
# print(response.text)
# print(response.content.decode()) # 注意這里!
print(response.url)# 打印響應的url
print(response.status_code)# 打印響應的狀態碼
print(response.request.headers)# 打印響應對象的請求頭
print(response.headers)# 打印響應頭
print(response.request._cookies)# 打印請求攜帶的cookies
print(response.cookies)# 打印響應中攜帶的cookies
Requests實操:
requests模塊發送請求
發送帶header的請求
我們先寫一個獲取百度首頁的代碼
import requests
url = 'http://www.voyageurimaginaire.com'
response = requests.get(url)
print(response.content.decode())
# 打印響應對應請求的請求頭信息
print(response.request.headers)
從瀏覽器中復制User-Agent,構造Headers字典;完成下面的代碼后,運行代碼查看結果
import requests
url = 'http://www.voyageurimaginaire.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"}
# 在請求頭中帶上User-Agent,模擬瀏覽器發送請求
response = requests.get(url, headers=headers)
print(response.content)
# 打印請求頭信息
print(response.request.headers)
發送帶參數的請求:
我們在使用百度搜索的時候經常發現url地址中會有一個 ?,那么該問號后邊的就是請求參數,又叫做查詢字符串
在url攜帶參數,直接對含有參數的url發起請求
import requests
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"}
url = 'https://www.baidu.com/s?wd=python'
response = requests.get(url, headers=headers)
通過Params攜帶參數字典:
1.構建請求參數字典
2.向接口發送請求的時候帶上參數字典,參數字典設置給params
import requests
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"}
# 這是目標url
# url = 'https://www.baidu.com/s?wd=python'
# 最后有沒有問號結果都一樣
url = 'https://www.baidu.com/s?'
# 請求參數是一個字典 即wd=python
kw = {'wd': 'python'}
# 帶上請求參數發起請求,獲取響應
response = requests.get(url, headers=headers, params=kw)
print(response.content)
import requests
url = 'https://github.com/USER_NAME'
# 構造請求頭字典
headers = {
# 從瀏覽器中復制過來的User-Agent
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36',
# 從瀏覽器中復制過來的Cookie
'Cookie': 'xxx這里是復制過來的cookie字符串'
}
# 請求頭參數字典中攜帶cookie字符串
resp = requests.get(url, headers=headers)
print(resp.text)
超時參數timeout的使用:
在平時網上沖浪的過程中,我們經常會遇到網絡波動,這個時候,一個請求等了很久可能仍然沒有結果。
在爬蟲中,一個請求很久沒有結果,就會讓整個項目的效率變得非常低,這個時候我們就需要對請求進行強制要求,讓他必須在特定的時間內返回結果,否則就報錯。
1、超時參數timeout的使用方法
response = requests.get(url, timeout=3)
2、timeout=3表示:發送請求后,3秒鐘內返回響應,否則就拋出異常
Requests發送post請求的方法: