Python爬蟲常用庫之requests詳解

2022-01-02 Python愛好者社區

作者:sergiojune
      個人公眾號:日常學python

作者好文:Python爬蟲常用庫之urllib詳解

在使用了urllib庫之後,感覺很麻煩,比如獲取個cookie都需要分幾步,代碼又多,這和python的風格好像有點不太像哈,那有沒有更加容易點的請求庫呢?答案是有的,那就是第三方庫requests,這個庫的作者是大名鼎鼎的kennethreitz,創作這個庫的原因就是想讓python開發者更加容易地發起請求,處理請求。裡面還有個名字:HTTP for Humans,顧名思義,就是用來請求http的。想看原始碼的可以在github上搜索他的名字就可以看到了。

接下來介紹下怎樣用這個庫吧!

因為這是第三方庫,所以我們需要下載,需要在命令行輸入

如果你裝的是anaconda的忽略這條

安裝好了就來進行使用吧

  進行簡單的操作

發送一個get請求

# 發送請求
import requests
response = requests.get('http://httpbin.org/get')
# 獲取返回的html信息
print(response.text)

這樣就發送了一個get請求,並且還列印了返回的內容,這個不再需要知道網頁是哪個編碼的,不過有時會出現編碼問題,但是你也可以指定編碼類型,如:

response.encoding = 'utf-8'

指定完成後就可以正常編碼了,前提你得知道網頁的編碼類型。

出了上面這些,我們還可以獲取下面的信息

print(response.headers)
# 請求狀態碼
print(response.status_code)
# 獲取網頁的二進位內容
print(response.content)
print(response.url) # 獲取請求的url
print(response.cookies) # 獲取cookie

是不是覺得很容易,一行代碼就可以了。不再需要幾步代碼什麼的了。

接下來被發爬的話帶上個請求頭來進行請求

# 還可以添加請求頭進行請求
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36'}
response = requests.get('http://httpbin.org/get', headers=headers )
print(response.headers)
print(response.text)

加個請求頭也就是加個關鍵字參數而已

還可以進行帶參數的get請求

# 進行帶參數的get請求
data = {'name': 'june', 'password': 123456}
response = requests.get('http://httpbin.org/get', params=data)
print(response.text)

那如果需要登陸呢?post請求怎樣發?告訴你,照樣很簡單

# 進行post請求
data = {'name': 'june', 'password': 123456}
response = requests.post('http://httpbin.org/post', data=data, headers=headers)
print(response.text)

是不是很簡單,也是加個data關鍵字參數,把要提交的登陸參數進行post上去。

那除了上面的兩個請求,還能進行別的請求嗎?我可以非常開心地告訴你,可以的。比如,你要發個put請求,如這樣

requests.put()
requests.delete()

這個就是發送put請求和delete請求的,其他的請求也是這樣發送,就不一 一說了。

  進行複雜點的請求

在登陸的時候我們有時候需要輸入驗證碼,那怎樣輸呢?爬蟲的看不了網頁,最簡單的做法就是把這個驗證碼的圖片下載下來然後手動輸入,那麼我們怎樣下載呢?我們可以向這個圖片的url發送請求,然後把返回內容以二進位方法存入文件裡面就可以了。

代碼如下:

# 從網上讀取二進位數據,比如圖片
response = requests.get('https://www.baidu.com/img/bd_logo1.png', headers=headers)
# 這個是直接獲取字節碼,這個是要保存的文件
print(response.content)
# 這個是獲取解碼後的返回內容,這個是亂碼
print(response.text)
# 用文件來把圖片下載下來
with open('baidu.png', 'wb') as f: # 注意寫的方式是以二進位方式寫入
f.write(response.content)
print('下載完畢')

還是很簡單,不得不說,這個庫太好用了。

當我們需要上傳文件的時候,比如圖片,我們還可以用post方法把他發送出去

# 上傳文件
files = {'picture': open('baidu.png', 'rb')}
response = requests.post('http://httpbin.org/post', files=files)
print(response.text)

獲取cookie並簡單處理一下

# 獲取cookie
response = requests.get('https://www.baidu.com')
for k, v in response.cookies.items():
print(k, '=', v)

當網頁返回內容是json格式是,我們不需要用json庫來解析,我們可以直接利用requests的方法進行解析,兩者的效果是一樣的

# 解析json
j = response.json() # 可以用json庫來解析,結果一樣

在urllib庫時保存登陸信息需要把cookie保存下來,但是在requests庫裡面,我們只需要用requests.session()來保存信息就可以了。

# 用會話來保持登陸信息
session = requests.session()
response = session.get('http://httpbin.org/cookies/set/number/123456')
print(response.text)

這樣就可以保存登陸了,不需要為cookie操心了,但是每次獲取一個session就可以了,然後用來請求或者其他操作。不需要每次請求或者操作都創建一個sesion出來,這樣是保存不了登陸信息的

當一個網站不安全,需要你用證書驗證的,比如這個網站

https://www.12306.cn


這時要訪問裡面的網站內容,我們就需要進行驗證,代碼如下

# 證書驗證
response = requests.get('https://www.12306.cn', verify=False) # 不加這個關鍵字參數的話會出現驗證錯誤問題,因為這個網站的協議不被信任

這樣就可以進行訪問了,但是會有一條警告


E:\anaconda\lib\site-packages\urllib3\connectionpool.py:858: InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings
InsecureRequestWarning)

覺得不美觀的,我們還可以在請求時加個cert關鍵字參數,值為可信任的證書,為一個元組,寫上帳號和密碼之類的,這裡就不演示了

遇到需要認證的網站,我們也可以這樣

from requests.auth import HTTPBasicAuth
# 設置認證
# requests.get('需要認證的網址', auth=HTTPBasicAuth('user', 'passwd')) # 由於找不到需要認證的網址,所以先寫個主體
# 還可以這樣認證
# requests.get('需要認證的網址', auth=('user', 'passwd')) # 這樣就簡單點

由於我找不到需要認證的網站,所以就不演示了。

requests還可以用代理ip來進行請求網站來防止ip被封以至於自己爬不了的尷尬。使用代理ip也比urllib庫簡單得多,代碼如下:

# 設置代理
proxies = {'http': 'http://122.114.31.177:808',
'https': 'https://119.28.223.103:8088'}
# 在請求時添加上列代理
response = requests.get('http://httpbin.org/get', proxies=proxies)
print(response.text)

上面的字典格式需要一 一對應,然後在請求時加上個關鍵字參數proxies就可以了。

  請求異常處理

在程序運行時,遇到錯誤時程序就會被強行停止,如果想要繼續運行,就需要進行捕捉異常來讓程序繼續運行。

在requests庫中有個處理異常的庫requests.exceptions

這裡簡單地處理下請求超時的處理情況

import requests
from requests.exceptions import ReadTimeout, ConnectTimeout, HTTPError, ConnectionError, RequestException
# 捕捉異常
try:
response = requests.get('http://httpbin.org/get', timeout=0.1) # 規定時間內未響應就拋出異常
print(response.text)
except ReadTimeout as e:
print('請求超時')
except ConnectionError as e:
print('連接失敗')
except RequestException as e:
print('請求失敗')

這裡捕捉了三個異常,因為ReadTimeout是ConnectionError的子類,所以先捕捉ReadTimeout,再捕捉父類的。而ConnectionError 和 RequestException 同理

更多的異常處理可以查看文檔哈。

  最後

以上均是我在學習時的筆記和個人在運用時遇到的一些坑都簡單地記載了上去,希望對你有用哈,如果想看更多的用法可以去官方文檔查看。還有代碼我放在了github上,要的話可以上去查看。

GitHub:https://github.com/SergioJune/gongzhonghao_code/tree/master/python3_spider

官方文檔:http://docs.python-requests.org/zh_CN/latest/index.html

學習參考資料:https://edu.hellobi.com/course/157


讚賞作者

Python愛好者社區歷史文章大合集

Python愛好者社區歷史文章列表(每周append更新一次)

福利:文末掃碼立刻關注公眾號,「Python愛好者社區」,開始學習Python課程:

關注後在公眾號內回復課程即可獲取:

小編的Python入門視頻課程!!!

崔老師爬蟲實戰案例免費學習視頻。

丘老師數據科學入門指導免費學習視頻。

陳老師數據分析報告製作免費學習視頻。

玩轉大數據分析!Spark2.X+Python 精華實戰課程免費學習視頻。

丘老師Python網絡爬蟲實戰免費學習視頻。

相關焦點

  • Python爬蟲利器一之Requests庫的用法
    註:Python 版本依然基於 2.7前言之前我們用了 urllib 庫,這個作為入門的工具還是不錯的,對了解一些爬蟲的基本理念,掌握爬蟲爬取的流程有所幫助。入門之後,我們就需要學習一些更加高級的內容和工具來方便我們的爬取。那麼這一節來簡單介紹一下 requests 庫的基本用法。
  • Python爬蟲--Requests 庫用法大全
    昨晚分享了Python爬蟲的基本知識,本文分享一下爬蟲裡面請求相關的內容:Requests 用法。
  • 小白學 Python 爬蟲(17):Requests 基礎使用
    爬蟲(3):前置準備(二)Linux基礎入門小白學 Python 爬蟲(4):前置準備(三)Docker基礎入門小白學 Python 爬蟲(5):前置準備(四)資料庫基礎小白學 Python 爬蟲(6):前置準備(五)爬蟲框架的安裝小白學 Python 爬蟲(7):HTTP 基礎小白學 Python 爬蟲(8):網頁基礎
  • Python爬蟲常用庫之urllib詳解
    代碼如下: 1from urllib import request, parse 2# 使用post方法來進行模擬登陸豆瓣 3data = {'source': 'None', 4 'redir': 'https://www.douban.com/', 5 'form_email': 'user', 6 'form_password': 'passwd
  • Python 爬蟲基礎入門篇——Requests模塊
    模塊簡介Requests是使用Apache2 licensed 許可證的HTTP庫;是一個基於Python開的Http庫,其在Python內置模塊的基礎上進行了高度的封裝,從而我們在使用Http請求的時候變得非常的簡單;比urllib2模塊更簡潔好用;安裝安裝很簡單請求類型HTTP的請求類型分別為:GET(獲取數據)、POST(提交表單
  • 10個Python爬蟲入門實例
    涉及主要知識點:web是如何交互的requests庫的get、post函數的應用response對象的相關函數,屬性python文件的打開,保存代碼中給出了注釋,並且可以直接運行哦如何安裝requests庫(安裝好python的朋友可以直接參考,沒有的,
  • python爬蟲系列(3)- 網頁數據解析(bs4、lxml、Json庫)
    python 爬蟲 常見流程.jpg本文記錄解析網頁bs4、lxml、Json一些常用方法和使用樣板簡介通過requests庫向網站請求網頁,獲得網頁原始碼之後,下一步的工作就需要對網頁代碼進行解析,方便後面的提取工作。永恆君目前常使用的有lxml、bs4、json等庫,本文就記錄一些常用方法,以及一些使用樣板。
  • 一個入門級python爬蟲教程詳解
    這篇文章主要介紹了一個入門級python爬蟲教程詳解,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑑價值,需要的朋友可以參考下
  • Python爬蟲模塊requests常用函數
    requests 是Python裡面的一個爬蟲模塊,它可以進行一個簡單的get和post請求,它是對Python基礎爬蟲模塊urllib的一個封裝,所以,學爬蟲學他就好了,高效易學。/2 基本用法/基本用法如下表所示:方法說明requests.request()構造一個請求requests.get()該方法用於向目標網址發送請求,接收響應.requests.head()只請求頁面的首部。reques
  • Python爬蟲之基本庫的使用
    引言學習爬蟲,最初的操作便是模擬瀏覽器向伺服器發出請求,那麼我們需要從哪個地方開始做起呢?請求需要我們自己來構造嗎?需要關心請求這個數據結構的實現嘛?需要了解HTTP、TCP、IP層的網絡傳輸通信嗎?需要直到伺服器的響應和應答原理嗎?
  • 第 60 天:Python Requests 庫的基本使用
    之前我們用了 urllib 庫,這個作為入門的工具還是不錯的,對了解一些爬蟲的基本理念,掌握爬蟲爬取的流程有所幫助。入門之後,我們就需要學習一些更加高級的內容和工具來方便我們的爬取。那麼這一節來簡單介紹一下 requests 庫的基本用法。
  • Python 爬蟲入門
    一、Python 開發環境的搭建 Python 目前流行 Python 2.x 與 Python 3.x 兩個版本,由於 Python 2 只會維護到 2020 年,因此這裡建議使用 python 3 來作為編程環境。
  • Python爬蟲之urllib庫—爬蟲的第一步
    帶著這個問題我也就開始了urllib庫的學習。首先不得不提一下爬取數據的過程,弄清楚這到底是怎樣一個過程,學習urllib的時候會更方便理解。  其實,爬蟲的過程和瀏覽器瀏覽網頁的過程是一樣的。道理大家應該都明白,就是當我們在鍵盤上輸入網址點擊搜索之後,通過網絡首先會經過DNS伺服器,分析網址的域名,找到了真正的伺服器。
  • Python爬蟲開發教程,一看就懂!
    現在Python語言大火,在網絡爬蟲、人工智慧、大數據等領域都有很好的應用。今天我向大家介紹一下Python爬蟲的一些知識和常用類庫的用法,希望能對大家有所幫助。其實爬蟲這個概念很簡單,基本可以分成以下幾個步驟:發起網絡請求這個步驟常用的類庫有標準庫urllib以及Python上常用的requests庫。解析網頁常用的類庫有的BeautifulSoup。
  • python爬蟲常用庫之BeautifulSoup詳解
    所以說學不會是很正常的,不怕,除了正則,我們還可以用另外一個強大的庫來解析html。所以,今天的主題就是來學習這個強大的庫--BeautifulSoup,不過正則還是需要多多練習下的。因為是第三方庫所以我們需要下載,在命令行敲下以下代碼進行下載pip install beautifulsoup4安裝第三方解析庫如果不知道有什麼用請往下看1.相關解析庫的介紹這裡官方推薦解析庫為lxml,因為它的效率高。
  • python爬蟲系列(4)- 提取網頁數據(正則表達式、bs4、xpath)
    python 爬蟲 常見流程.jpg就永恆君使用經驗來說,bs4、xpath比較容易上手但是功能有限,正則比較晦澀難懂但是功能超級強大。我們寫爬蟲最終獲取的數據信息,就是通過_Element 對象的方法來獲取的。
  • Python爬蟲教學(寫給入門的新手)
    本文著重點在於教新手如何學習爬蟲,並且會以外行人的思維進行形象地講解。最近我一兄弟想學,我就想寫個教學給他,然後想不如分享到網絡上,給熱愛學習的人們一起學習探討。各位大神路過,如發現文章中有不妥之處,敬請指出,畢竟我最近剛開始學會撰寫技術文章。
  • Python爬蟲:一文帶你輕鬆掌握requests模塊
    因為在使用urllib模塊的時候,會有諸多不便之處,總結如下:我們如何使用requests模塊呢?因為requests模塊不是Python的內置模塊,所以我們要通過包管理器pip進行下載。pip install requests或者pip3 install requests安裝完成之後我們就可以在py文件中導入使用了import requests我們前面說過爬蟲的基本步驟是:發送請求【可以使用urllib或者requests
  • Python爬蟲入門教程:超級簡單的Python爬蟲教程
    這是一篇詳細介紹 Python 爬蟲入門的教程,從實戰出發,適合初學者。讀者只需在閱讀過程緊跟文章思路,理清相應的實現代碼,30 分鐘即可學會編寫簡單的 Python 爬蟲。5 部分內容:了解網頁;使用 requests 庫抓取網站數據;使用 Beautiful Soup 解析網頁;清洗和組織數據;
  • Python爬蟲基礎教學(寫給入門的新手)
    前言剛學完python基礎,想學習爬蟲的新手,這裡有你想要的東西。本文著重點在於教新手如何學習爬蟲,並且會以外行人的思維進行形象地講解。最近我一兄弟想學,我就想寫個教學給他,然後想不如分享到網絡上,給熱愛學習的人們一起學習探討。