入門學Python一定要知道的requests模組安裝及使用
主要學習requests這個http模組,該模組主要用於傳送請求獲取響應,該模組有很多的替代模組,比如說urllib模組,但是在工作中用的最多的還是requests模組,requests的程式碼簡潔易懂,相對於臃腫的urllib模組,使用requests編寫的爬蟲程式碼將會更少,而且實現某一功能將會簡單。因此建議大家掌握該模組的使用。
requests模組
我們來學習如何在程式碼中實現我們的爬蟲
1. requests模組介紹
requests文件
** 1.1 requests模組的作用:**
傳送http請求,獲取響應資料
1.2 requests模組是一個第三方模組,需要在你的python(虛擬)環境中額外安裝
pip/pip3 install requests
1.3 requests模組傳送get請求
需求:透過requests向百度首頁傳送請求,獲取該頁面的原始碼 執行下面的程式碼,觀察列印輸出的結果
1.2.1-簡單的程式碼實現
import requests
目標url
url = ''
向目標url傳送get請求
response = requests.get(url)
列印響應內容
print(response.text)
知識點:掌握 requests模組傳送get請求 2. response響應物件 ----------------
觀察上邊程式碼執行結果發現,有好多亂碼;這是因為編解碼使用的字符集不同早造成的;我們嘗試使用下邊的辦法來解決中文亂碼問題
# 1.2.2-response.content import requests # 目標url url = '' # 向目標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,嘗試參考該編碼字符集,注意存在不準確的情況
**2.1 response.text 和response.content的區別:**
response.text
型別:str 解碼型別: requests模組自動根據HTTP 頭部對響應的編碼作出有根據的推測,推測的文字編碼
response.content
型別:bytes 解碼型別: 沒有指定
**2.2 透過對response.content進行decode,來解決中文亂碼**
response.content.decode() 預設utf-8
response.content.decode("GBK")
常見的編碼字符集
* utf-8 * gbk * gb2312 * ascii (讀音:阿斯克碼) * iso-8859-1 **2.3 response響應物件的其它常用屬性或方法** > response = requests.get(url)中response是傳送請求獲取的響應物件;response響應物件中除了text、content獲取響應內容以外還有其它常用的屬性或方法:
response.url響應的url;有時候響應的url和請求的url並不一致
response.status_code 響應狀態碼
response.request.headers 響應對應的請求頭
response.headers 響應頭
response.request._cookies 響應對應請求的cookie;返回cookieJar型別
response.cookies 響應的cookie(經過了set-cookie動作;返回cookieJar型別
response.json()自動將json字串型別的響應內容轉換為python物件(dict or list)
# 1.2.3-response其它常用屬性 import requests # 目標url url = '' # 向目標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 ``` 3. requests模組傳送請求 ------------------ **3.1 傳送帶header的請求** ``` 我們先寫一個獲取百度首頁的程式碼
import requests
url = ''
response = requests.get(url)
print(response.content.decode())
列印響應對應請求的請求頭資訊
print(response.request.headers)
**3.1.1 思考**
對比瀏覽器上百度首頁的網頁原始碼和程式碼中的百度首頁的原始碼,有什麼不同?
檢視網頁原始碼的方法: 右鍵-檢視網頁原始碼 或 右鍵-檢查
對比對應url的響應內容和程式碼中的百度首頁的原始碼,有什麼不同?
檢視對應url的響應內容的方法: 右鍵-檢查 點選 Net work 勾選 Preserve log 重新整理頁面 檢視Name一欄下和瀏覽器位址列相同的url的Response
程式碼中的百度首頁的原始碼非常少,為什麼?
需要我們帶上請求頭資訊 回顧爬蟲的概念,模擬瀏覽器,欺騙伺服器,獲取和瀏覽器一致的內容 請求頭中有很多欄位,其中User-Agent欄位必不可少,表示客戶端的作業系統以及瀏覽器的資訊
**3.1.2 攜帶請求頭髮送請求的方法** requests.get(url, headers=headers)
headers引數接收字典形式的請求頭
請求頭欄位名作為key,欄位對應的值作為value
**3.1.3 完成程式碼實現**
從瀏覽器中複製User-Agent,構造headers字典;完成下面的程式碼後,執行程式碼檢視結果
import requests url = '' 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) ``` **3.2 傳送帶引數的請求** ``` 我們在使用百度搜尋的時候經常發現url地址中會有一個 ?,那麼該問號後邊的就是請求引數,又叫做查詢字串 ``` 3.2.1 在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 = '/s?wd=python' response = requests.get(url, headers=headers) ``` **3.2.2 透過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 = '/s?wd=python' # 最後有沒有問號結果都一樣 url = '/s?' # 請求引數是一個字典 即wd=python kw = {'wd': 'python'} # 帶上請求引數發起請求,獲取響應 response = requests.get(url, headers=headers, params=kw) print(response.content) ``` **3.3 在headers引數中攜帶cookie** ``` 網站經常利用請求頭中的Cookie欄位來做使用者訪問狀態的保持,那麼我們可以在headers引數中新增Cookie,模擬普通使用者的請求。我們以github登陸為例: ``` **3.3.1 github登陸抓包分析** ``` 開啟瀏覽器,右鍵-檢查,點選Net work,勾選Preserve log 訪問github登陸的url地址 輸入賬號密碼點選登陸後,訪問一個需要登陸後才能獲取正確內容的url,比如點選右上角的Your profile訪問 確定url之後,再確定傳送該請求所需要的請求頭資訊中的User-Agent和Cookie ``` ![](~tplv-k3u1fbpfcp-zoom-1.image) **3.3.2 完成程式碼** ``` 從瀏覽器中複製User-Agent和Cookie 瀏覽器中的請求頭欄位和值與headers引數中必須一致 headers請求引數字典中的Cookie鍵對應的值是字串
import requests
url = ''
構造請求頭字典
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)
**3.3.3 執行程式碼驗證結果**
在列印的輸出結果中搜尋title,html中的標題文字內容如果是你的github賬號,則成功利用headers引數攜帶cookie,獲取登陸後才能訪問的頁面
![](~tplv-k3u1fbpfcp-zoom-1.image) 知識點:掌握 headers中攜帶cookie **3.4 cookies引數的使用**
上一小節我們在headers引數中攜帶cookie,也可以使用專門的cookies引數
cookies引數的形式:字典
cookies = {"cookie的name":"cookie的value"}
該字典對應請求頭中Cookie字串,以分號、空格分割每一對字典鍵值對 等號左邊的是一個cookie的name,對應cookies字典的key 等號右邊對應cookies字典的value
cookies引數的使用方法
response = requests.get(url, cookies)
將cookie字串轉換為cookies引數所需的字典:
cookies_dict = {cookie.split('=')[0]:cookie.split('=')[-1] for cookie in cookies_str.split('; ')}
注意:cookie一般是有過期時間的,一旦過期需要重新獲取
import requests url = '' # 構造請求頭字典 headers = { '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' } # 構造cookies字典 cookies_str = '從瀏覽器中copy過來的cookies字串' cookies_dict = {cookie.split('=')[0]:cookie.split('=')[-1] for cookie in cookies_str.split('; ')} # 請求頭引數字典中攜帶cookie字串 resp = requests.get(url, headers=headers, cookies=cookies_dict) print(resp.text) ``` 知識點:掌握 cookies引數的使用 **3.5 cookieJar物件轉換為cookies字典的方法** ``` 使用requests獲取的resposne物件,具有cookies屬性。該屬性值是一個cookieJar型別,包含了對方伺服器設定在本地的cookie。我們如何將其轉換為cookies字典呢? 轉換方法 cookies_dict = requests.utils.dict_from_cookiejar(response.cookies) 其中response.cookies返回的就是cookieJar型別的物件 requests.utils.dict_from_cookiejar函式返回cookies字典
作者:白又白i
連結:
來源:掘金
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2236/viewspace-2796642/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Python:requests模組Python
- Python paramiko模組的安裝與使用Python
- Python2、3並存,Python3無法安裝requests模組Python
- python 模組安裝Python
- Python模組安裝Python
- python爬蟲requests模組Python爬蟲
- python 安裝模組的方法Python
- Python入門—time模組Python
- Python安裝與Pycharm使用入門PythonPyCharm
- python爬蟲:爬蟲的簡單介紹及requests模組的簡單使用Python爬蟲
- Python 庫/模組的pip安裝和IPython的使用Python
- Python安裝selenium模組Python
- python的requests怎麼安裝Python
- Python:檢視已安裝模組 和 檢視可匯入模組Python
- 【PHP】Mcrypt 擴充套件模組安裝及使用PHP套件
- 一、Python安裝與Pycharm使用入門PythonPyCharm
- python requests模組session的使用建議及整個會話中的所有cookie的方法PythonSession會話Cookie
- requests模組
- python openssl模組如何安裝?Python
- 怎樣安裝python的GPIO模組Python
- Python HTTP庫:requests快速入門PythonHTTP
- python Mqtt 的安裝及使用PythonMQQT
- Python筆記之paramiko模組安裝和使用示例Python筆記
- Zookeeper入門學習--01介紹及安裝
- Python安裝模組有哪些方法?Python
- Postman安裝及入門教程Postman
- Python requests 安裝與開發Python
- Python3安裝requests庫Python
- Python 模組的製作,釋出,安裝Python
- Centos下安裝FastDFS及Nginx模組CentOSASTNginx
- Python入門(二十六):檔案模組(os模組與shutil模組)Python
- Python模組、第三方模組安裝、模組匯入教程Python
- Python基礎入門(8)- Python模組和包Python
- Python "爬蟲"出發前的裝備之二資料先行( Requests 模組)Python爬蟲
- python模組安裝目錄在哪裡Python
- PHP檔案型別檢查及fileinfo模組安裝使用PHP型別
- 爬蟲——Requests模組爬蟲
- 爬蟲-Requests模組爬蟲