【python學習】爬蟲中常使用的urllib和requests庫的的背景、定義、特點、功能、代碼示例以及兩者的區別

引言

urllib是Python標準庫中的一個模塊,它提供了一系列用于操作URL的功能
requests是一個Python第三方庫,由Kenneth Reitz創建,用于簡化HTTP客戶端的編程

一、urllib的定義

urllib可以操作url,主要分為以下幾個子模塊:

1.1 urllib.request

用于打開和讀取URLs

1.2 urllib.error

包含urllib.request引發的異常

1.3 urllib.parse

用于解析URLs

1.4 urllib.robotparser

用于解析robots.txt文件

二、urllib的特點

2.1 內置

urllib是Python標準庫的一部分,因此不需要額外安裝

2.2 功能全面

支持多種網絡協議,包括HTTP、HTTPS、FTP等

2.3 易于使用

提供了簡單易用的API,適合進行簡單的網絡請求操作

三、urllib的功能

3.1 打開URLs

使用urllib.request.urlopen()函數可以輕松打開一個URL

3.2 發送請求

支持發送GET、POST等HTTP請求

3.3 處理異常

urllib.error模塊可以捕獲和處理網絡請求過程中出現的異常

3.4 解析URLs

urllib.parse模塊可以解析和構造URLs

3.5 遵守robots.txt

urllib.robotparser模塊可以幫助遵守網站的爬蟲訪問規則

四、urllib的代碼示例

以下是使用urllib模塊進行網絡請求的幾個示例:

4.1 發送GET請求

import urllib.request
# 發送GET請求
with urllib.request.urlopen('http://www.example.com') as response:html = response.read()print(html.decode('utf-8'))

4.2 發送POST請求

import urllib.request
import urllib.parse
url = 'http://httpbin.org/post'
values = {'key': 'value'}
data = urllib.parse.urlencode(values)
data = data.encode('utf-8')  # data should be bytes
req = urllib.request.Request(url, data=data, method='POST')
with urllib.request.urlopen(req) as response:print(response.read().decode('utf-8'))

4.3 處理異常

import urllib.request
import urllib.error
try:response = urllib.request.urlopen('http://www.example.com/404')
except urllib.error.HTTPError as e:print(f'HTTPError: {e.code} {e.reason}')
except urllib.error.URLError as e:print(f'URLError: {e.reason}')

4.4 解析URLs

from urllib.parse import urlparse
result = urlparse('http://www.example.com/index.html;user?id=5#comment')
print(result)
# 輸出:ParseResult(scheme='http', netloc='www.example.com', path='/index.html', params='user', query='id=5', fragment='comment')

以上示例展示了urllib庫的一些基本用法,包括如何發送HTTP請求、如何處理請求異常以及如何解析URLs。由于urllib庫功能豐富,這些示例只是冰山一角。

五、requests的定義

requests是基于urllib3,提供了一個更加用戶友好的API來發送HTTP/1.1請求

六、requests的特點

6.1 簡潔易用

requests的API設計簡潔直觀,易于上手和使用

6.2 功能豐富

支持HTTP連接保持和連接池,支持SSL/TLS驗證,支持國際化和本地化等

6.3 無需手動處理編碼

自動處理HTTP響應內容的編碼問題

6.4 支持會話與 cookies

能夠使用會話對象來跨請求保持某些參數,如cookies

6.5 支持插件

requests支持插件,可以輕松擴展其功能

七、requests的功能

7.1 發送各種HTTP請求(GET, POST, PUT, DELETE, HEAD, OPTIONS等)

7.2 處理請求參數、URL、頭信息和內容數據

7.3 處理HTTP響應內容,包括JSON、XML、HTML等

7.4 使用會話對象來跨請求保持某些參數

7.5 上傳文件

7.6 處理SSL證書驗證

7.7 設置代理

7.8 異常處理

八、requests的安裝

8.1 requests不是Python標準庫的一部分,需要通過以下命令安裝:

pip install requests

8.2 若是在pycharm中則按下圖所示操作:

在這里插入圖片描述

九、requests的代碼示例

以下是使用requests庫進行網絡請求的幾個示例:

9.1 發送GET請求

import requests
response = requests.get('https://api.github.com/user', params={'username': 'example'})
print(response.json())

9.2 發送POST請求

import requests
data = {'key1': 'value1', 'key2': 'value2'}
response = requests.post('http://httpbin.org/post', data=data)
print(response.text)

9.3 使用會話對象

import requests
s = requests.Session()
s.get('http://httpbin.org/cookies/set/sessioncookie/123456789')
response = s.get("http://httpbin.org/cookies")
print(response.text)

9.4 異常處理

import requests
from requests.exceptions import HTTPError, ConnectionError, Timeout, RequestException
try:response = requests.get('https://api.github.com', timeout=5)response.raise_for_status()
except HTTPError as http_err:print(f'HTTP error occurred: {http_err}')
except ConnectionError as conn_err:print(f'Connection error occurred: {conn_err}')
except Timeout as timeout_err:print(f'Timeout error occurred: {timeout_err}')
except RequestException as req_err:print(f'Oh no, something bad happened: {req_err}')

9.5 上傳文件

import requests
files = {'file': open('report.xls', 'rb')}
response = requests.post('http://httpbin.org/post', files=files)
print(response.text)

這些示例展示了requests庫的幾個核心功能

  1. 發送請求
  2. 處理響應
  3. 使用會話
  4. 異常處理
  5. 上傳文件

requests庫因其簡潔和強大而成為Python中處理HTTP請求的常用庫

十、urllibrequests的區別

urllibrequests都是Python中用于發送HTTP請求的庫,但它們在API設計、易用性、功能性和社區支持等方面存在一些顯著的區別

10.1 API設計和易用性

  • urllib
    • 作為Python標準庫的一部分,無需額外安裝
    • 提供了較低級別的API,使用起來較為復雜,需要編寫更多的代碼來完成相同的任務
    • 異常處理較為分散,需要分別捕獲不同類型的異常
  • requests
    • 需要單獨安裝,不是Python標準庫的一部分
    • 提供了簡潔、直觀的API,使得發送請求和處理響應變得極其簡單
    • 異常處理更加統一,通過requests.exceptions模塊來捕獲和處理各種異常

10.2 功能性

  • urllib
    • 功能相對基礎,適合進行簡單的請求
    • 對于復雜的任務,如會話保持、cookie處理、SSL驗證等,需要更多的手動操作
  • requests
    • 功能更加全面,內置了會話對象、cookie持久化、SSL驗證、連接池、JSON響應解析等高級功能
    • 支持插件,可以輕松擴展其功能

10.3 社區支持

  • urllib
    • 作為標準庫的一部分,更新周期與Python相同,通常較為穩定
    • 社區支持主要通過Python官方渠道
  • requests
    • 社區驅動,更新頻繁,社區支持廣泛
    • 由于是第三方庫,可能包含更多最新的特性和改進

10.4 性能

  • urllib
    • 對于簡單的請求,性能通常足夠
    • 對于復雜的請求或并發操作,可能需要額外的庫(如http.client)來優化
  • requests
    • 內部使用了urllib3,因此在性能上有所優化,尤其是在并發請求時

示例對比

以下是使用urllibrequests發送GET請求的簡單示例對比:
使用urllib發送GET請求:

import urllib.request
import urllib.error
try:with urllib.request.urlopen('http://example.com') as response:data = response.read()print(data.decode('utf-8'))
except urllib.error.HTTPError as e:print(f'HTTPError: {e.code} {e.reason}')
except urllib.error.URLError as e:print(f'URLError: {e.reason}')

使用requests發送GET請求:

import requests
response = requests.get('http://example.com')
print(response.text)

使用requests發送網絡請求通常更加簡潔明了
然而,由于urllib是Python標準庫的一部分,因此在不允許安裝第三方庫的環境中,urllib可能是唯一的選擇

十一、總結(思維導圖)

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/46460.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/46460.shtml
英文地址,請注明出處:http://en.pswp.cn/web/46460.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

從人工巡檢到智能防控:智慧油氣田安全生產的新視角

一、背景需求 隨著科技的飛速發展,視頻監控技術已成為各行各業保障安全生產、提升管理效率的重要手段。特別是在油氣田這一特殊領域,由于其工作環境復雜、安全風險高,傳統的監控方式已難以滿足實際需求。因此,基于視頻監控AI智能…

側開知識點合集2

一、try .... catch.. AccessViolationException異常觸發后,下列程序的輸出結果為 static void Main(string[] args) { try { throw new AccessViolationException(); Console.WriteLine("error1"); } catch (Exception e) { Console.WriteLi…

ROS2從入門到精通2-3:機器人3D物理仿真Gazebo與案例分析

目錄 0 專欄介紹1 什么是Gazebo?2 Gazebo架構2.1 Gazebo前后端2.2 Gazebo文件格式2.3 Gazebo環境變量 3 Gazebo安裝與基本界面4 搭建自己的地圖4.1 編輯地圖4.2 保存地圖4.3 加載地圖 5 常見問題 0 專欄介紹 本專欄旨在通過對ROS2的系統學習,掌握ROS2底…

CSS技巧專欄:一日一例 8 - 純CSS利用mask屬性實現按鈕邊框對稱包圍特效

CSS技巧專欄:一日一例 8 - 純CSS利用mask屬性實現按鈕邊框對稱包圍特效 上篇作業解題 在前一篇文章的最后,給各位看官留了一個作業,如上圖所示。本篇文章,我們來公布一下它的源碼。 主要實現的思路 四個漸變色的線段,沿著四個方向的依次運動,(運動在加載前執行)使用 …

均值濾波算法及實現

均值濾波器的使用場景: 均值濾波器使用于處理一些如上述藍色線的高斯噪聲場景 紅色曲線是經過均值濾波處理后的數據。主要因為均值濾波設置數據緩沖區(也即延時周期),使得測量值經過緩沖不會出現特別大的變化。 黃色曲線為高斯噪聲…

【iOS】—— 消息傳遞和消息轉發

【iOS】—— 消息傳遞和消息轉發 1. 消息傳遞SEL選擇子IMP快速查找匯編代碼查找過程總結消息轉送快速查找IMP 慢速查找總結消息傳遞慢速查找IMP 2. 消息轉發動態決議動態解析添加方法 快速轉發慢速轉發 總結動態決議消息轉發消息的三次拯救 1. 消息傳遞 在iOS中,消…

一、單例模式

文章目錄 1 基本介紹2 實現方式2.1 餓漢式2.1.1 代碼2.1.2 特性 2.2 懶漢式 ( 線程不安全 )2.2.1 代碼2.2.2 特性 2.3 懶漢式 ( 線程安全 )2.3.1 代碼2.3.2 特性 2.4 雙重檢查2.4.1 代碼2.4.2 特性 2.5 靜態內部類2.5.1 代碼2.5.2 特性 2.6 枚舉2.6.1 代碼2.6.2 特性 3 實現的要…

【樂吾樂2D可視化組態編輯器】快捷鍵

快捷鍵 樂吾樂2D可視化組態編輯器demo:https://2d.le5le.com/ 快捷鍵描述空格 鼠標拖拽移動畫布鼠標右鍵拖拽移動畫布Ctrl 滾輪縮放畫布Ctrl 點擊 Pen多選Ctrl A全選Ctrl C復制Ctrl X剪切Ctrl V粘貼,alt視圖中心粘貼,shift原位粘貼…

查詢優化 -- UNION 用法

union 不返回重復行(所有字段值相同的行) union all 返回所有行 // 每類最多統計100條 select server_id,count(1) as logs from ( SELECT server_id FROM log WHERE log.type "a" AND server_id1 limit 100 ) UNION select server_id,coun…

谷粒商城-全文檢索-ElasticSearch

1.簡介 一個分布式的開源搜索和分析引擎,可以 秒 級的從海量數據中檢索 主要功能:做數據的檢索和分析(MySQL專攻于數據的持久化存儲與管理CRUD達到百萬以上的數據MSQL就會很慢,海量數據的檢索和分析還是要用ElasticSearch) 用途:我們電商項目里的所有的檢索功能都是由Elasti…

Java中為什么不能直接創建泛型數組

在Java中&#xff0c;不能直接創建泛型數組的主要原因是類型擦除和類型安全問題。 類型擦除 Java中的泛型是通過類型擦除&#xff08;Type Erasure&#xff09;實現的&#xff0c;這意味著在編譯時&#xff0c;泛型類型會被轉換成原始類型&#xff08;如 List<T> 會被轉…

網絡安全-網絡安全及其防護措施9

41.網絡故障排除 網絡故障排除的定義和重要性 網絡故障排除是指通過系統化的方法和工具&#xff0c;識別、診斷和解決網絡中出現的問題&#xff0c;以恢復正常的網絡服務和性能。有效的故障排除可以減少停機時間&#xff0c;提升網絡的穩定性和可靠性。 故障排除的步驟 問題…

基于X86+FPGA+AI數字化醫療設備:全自動尿沉渣檢測儀

助力數字醫療發展&#xff0c;信邁可提供全自動尿沉渣檢測儀專用計算機 隨著信息技術的不斷進步&#xff0c;醫療也進入了一個全新的數字化時代。首先是醫療設備的數字化&#xff0c;大大豐富了醫療信息的內涵和容量&#xff0c;具有廣闊的市場發展前景。 數字化醫療設備&…

使用Redis的SETNX命令實現分布式鎖

什么是分布式鎖 分布式鎖是一種用于在分布式系統中控制多個節點對共享資源進行訪問的機制。在分布式系統中&#xff0c;由于多個節點可能同時訪問和修改同一個資源&#xff0c;因此需要一種方法來確保在任意時刻只有一個節點能夠對資源進行操作&#xff0c;以避免數據不一致或…

白騎士的C++教學高級篇 3.1 文件操作

系列目錄 上一篇&#xff1a;白騎士的C教學進階篇 2.4 標準模板庫&#xff08;STL&#xff09; 文件操作是C編程中的一個重要部分&#xff0c;允許程序與外部存儲設備進行交互&#xff0c;從而實現數據的持久化存儲和讀取。C標準庫提供了豐富的文件操作功能&#xff0c;包括文…

嵌入式香橙派人工智能AI開發板詳細操作與遠程聊天實現

大家好&#xff0c;今天給大分享一個OrangePi AIpro&#xff08;20T&#xff09;采用昇騰作為主控芯片的開發板&#xff0c;開箱以及對應功能的詳細實現。 第一&#xff1a;板子基本介紹 接通電源給對應的開發板上電&#xff0c;觀察其中的現象&#xff0c;如下&#xff1a; 注…

基于HAL庫的stm32的OLED顯示屏顯示(IIC)

OLED OLED&#xff0c;即有機發光二極管( Organic Light Emitting Diode )。OLED由于同時具備自發光&#xff0c;不需背光源、對比度高、厚度薄、視角廣、反應速度快、可用于撓曲性面板、使用溫度范圍廣、構造及制程較簡單等優異之特性&#xff0c;被認為是下一代的平面顯示器…

龍國專利局瑞數6

聲明(lianxi a15018601872) 本文章中所有內容僅供學習交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包內容、敏感網址、數據接口等均已做脫敏處理&#xff0c;嚴禁用于商業用途和非法用途&#xff0c;否則由此產生的一切后果均與作者無關&#xff01; 前言(lianxi a…

富文本中提取信息并去除其中的HTML或XML標簽

要從富文本中提取信息并去除其中的HTML或XML標簽&#xff0c;可以使用不同的編程語言和庫。以下是一些流行語言中的示例方法&#xff1a; 1. Python&#xff08;使用BeautifulSoup&#xff09; BeautifulSoup是一個強大的Python庫&#xff0c;用于從HTML或XML文件中提取數據。…

巨魔商店(TrollStore)介紹與使用指南

iOS巨魔商店&#xff08;TrollStore&#xff09;介紹與使用指南 引言 在iOS系統中&#xff0c;App Store是官方唯一的應用下載渠道&#xff0c;但這也限制了用戶獲取非官方或破解版應用的可能性。然而&#xff0c;巨魔商店&#xff08;TrollStore&#xff09;的出現打破了這一…