建筑兔零基礎自學記錄69|爬蟲Requests-2

Requests庫初步嘗試

#導入requests庫
import requests
#requests.get讀取百度網頁
r=requests.get('http://www.baidu.com')
#輸出讀取網頁狀態
print(r.status_code)
#輸出網頁源代碼
print(r.text)

HTTP 狀態碼是三位數字,用于表示 HTTP 請求的結果。常見的狀態碼有:

  • 200:表示請求成功。
  • 404:表示請求的資源不存在。
  • 500:表示服務器內部出錯。

所以只有200是成功,其他都是失敗!

運行代碼看到200成功讀取網頁,并解讀了網頁源代碼

一、Requests庫主要七個方法

?

1、 requests.get('http://www.baidu.com')

這就是剛開始我們獲取百度網頁的方法,非常常用。

注意這里的網址是要http開頭的,如果只有www則會報錯

#輸出r對象的類型,即requests.models.Response
print(type(r))
#輸出HTTP 頭部信息
print(r.headers)

2、六個方法之間關系

3、PATCHPUT區別

? 假設URL位置有一組數據UserInfo,包括UserID、UserName等20個字段

需求:用戶修改了UserName,其他不變

  • 采用PATCH,僅向URL提交UserName的局部更新請求(局部改)
  • 采用PUT,必須將所有20個字段一并提交到URL,未提交字段被刪除(整體改)

PATCH的最主要好處:節省網絡帶寬

二、Response對象的屬性

?讓我們來解讀一下網頁的編碼方式:

import requests
r=requests.get('https://www.sina.com.cn/')
print(r.status_code)
print(r.text)
#輸出網頁header中得出的編碼方式
print(r.encoding)
#輸出網頁內容中分析得出的編碼方式
print(r.apparent_encoding)

可以看到解析內容看不懂

r.encoding得出新浪的編碼方式 ISO-8859-1
r.apparent_encoding分析出新浪推測的編碼方式utf-8

在中文網頁中只有utf-8才能讀出內容

當我們在代碼中添加r.encoding = 'utf-8' 才可以解讀出網頁內容

?

三、Response庫可能發生的異常

?

四、★★★爬取網頁的通用代碼框架

這是一個通用的代碼:

import requestsdef getHTMLText(url):try:r=requests.get(url,timeout=30)r.raise_for_status()    #如果狀態不是200,引發HTTPError異常r.encoding=r.apparent_encodingreturn r.textexcept:return "產生異常"if __name__=='__main__':url='https://www.sina.com.cn/'print(getHTMLText(url))

運行代碼可得

如果在網站中刪除http則會報錯

?

五、HTTP協議

HTTP是一個基于“請求與響應”模式的、無狀態的應用層協議

HTTP協議采用URL作為定位網絡資源的標識,URL格式如下:

http://host[:port][path]

  • host: 合法的Internet主機域名或IP地址
  • port: 端口號,缺省端口為80
  • path: 請求資源的路徑

URL是通過HTTP協議存取資源的Internet路徑,一個URL對應一個數據資源

六、總結

  • r.status_code:200是成功
  • requests.get('http://www.baidu.com')
  • PATCH局部更新?? /? PUT全局更新
  • r.encoding得出編碼方式
  • r.apparent_encoding推測編碼方式
  • 添加r.encoding = 'utf-8' 才可以解讀出網頁內容
  • 爬蟲通用代碼框架:

import requests

def getHTMLText(url):
??? try:
??????? r=requests.get(url,timeout=30)
??????? r.raise_for_status()??? #如果狀態不是200,引發HTTPError異常
??????? r.encoding=r.apparent_encoding
??????? return r.text
??? except:
??????? return "產生異常"

if __name__=='__main__':
??? url='https://www.sina.com.cn/'
??? print(getHTMLText(url))

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

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

相關文章

Web測試流程及注意點

在Web工程過程中,基于Web系統的測試、確認和驗收是一項重要而富有挑戰性的工作。基于Web的系統測試與傳統的軟件測試不同,它不但需要檢查和驗證是否按照設計的要求運行,而且還要測試系統在不同用戶的瀏覽器端的顯示是否合適。 重要的是&…

基于MATLAB/simulink的信號調制仿真--AM調制

實驗內容: 假設y(t)(20.5*2cos(2*pi*1000*t))*5cos(2*pi*2*1e4*t)調幅系統,請將一個頻率為1000HZ的余弦波信號,通過進行AM調制,載波信號頻率為20kHZ的余弦波,調制度ma0.…

通信協議詳解(十):PSI5 —— 汽車安全傳感器的“抗干擾狙擊手”

一、PSI5是什么? 一句話秒懂 PSI5就像傳感器界的“防彈信使”:在汽車安全系統(如氣囊)中,用兩根線同時完成供電數據傳輸,即便車禍時線路受損,仍能確保關鍵信號準確送達! 基礎概念…

數據結構與算法-圖論-復習1(單源最短路,全源最短路,最小生成樹)

1. 單源最短路 單一邊權 BFS 原理:由于邊權為單一值,可使用廣度優先搜索(BFS)來求解最短路。BFS 會逐層擴展節點,由于邊權相同,第一次到達某個節點時的路徑長度就是最短路徑長度。 用法:適用…

【WRF理論第十七期】單向/雙向嵌套機制(含namelist.input詳細介紹)

WRF運行的單向/雙向嵌套機制 準備工作:WRF運行的基本流程namelist.input的詳細設置&time_control 設置&domain 嵌套結構&bdy_control 配置部分 namelist 其他注意事項Registry.EM 運行 ARW 嵌套雙向嵌套(two-way nesting)單向嵌套…

怎么查看蘋果手機和ipad的設備信息和ios udid

你知道嗎?我們每天使用的iPhone和iPad,其實隱藏著大量詳細的硬件與系統信息。除了常見的系統版本和序列號外,甚至連電池序列號、攝像頭序列號、銷售地區、芯片型號等信息,也都可以輕松查到! 如果你是開發者、維修工程…

matlab內置的git軟件版本管理功能

1、matlab多人協作開發比普通的嵌入式軟件開發困難很多 用過matlab的人都知道,版本管理對于matlab來說真的很費勁,今天介紹的這個工具也不是說它就解決了這個痛點,只是讓它變得簡單一點。版本管理肯定是不可或缺的,干就完了 2、…

vscode集成deepseek實現輔助編程(銀河麒麟系統)【詳細自用版】

針對開發者用戶,可在Visual Studio Code中接入DeepSeek,實現輔助編程。 可參考我往期文章在銀河麒麟系統環境下部署DeepSeek:基于銀河麒麟桌面&&服務器操作系統的 DeepSeek本地化部署方法【詳細自用版】 一、前期準備 &#xff08…

Java 大廠面試題 -- JVM 深度剖析:解鎖大廠 Offe 的核心密鑰

最近佳作推薦: Java大廠面試高頻考點|分布式系統JVM優化實戰全解析(附真題)(New) Java大廠面試題 – JVM 優化進階之路:從原理到實戰的深度剖析(2)(New&#…

數據庫實踐題目:在線書店管理系統

完整的數據庫實踐題目:在線書店管理系統 數據庫表結構及示例數據 書籍表(books) CREATE TABLE books ( book_id INT PRIMARY KEY, title VARCHAR(100) NOT NULL, author VARCHAR(50) NOT NULL, publisher VARCHAR(50), publish_year INT, category VARCHAR(30), …

Linux 入門指令(1)

(1)ls指令 ls -l可以縮寫成 ll 同時一個ls可以加多個后綴 比如 ll -at (2)pwd指令 (3)cd指令 cd .是當前目錄 (4)touch指令 (5)mkdir指令 (6)rmdir和rm…

圖靈逆向——題七-千山鳥飛絕

目錄列表 過程分析headers頭部M參數分析載荷x參數分析響應數據解密分析 代碼實現 一進來還是一個無限debugger,前面有講怎么過,這里直接過掉~ 老規矩,養成習慣,先看請求頭里有沒有加密參數發現好像是有個M,它是個32位…

上門預約洗鞋店小程序都具備哪些功能?

現在大家對洗鞋子的清洗條件越來越高,在家里不想去,那就要拿去洗鞋店去洗。如果有的客戶沒時間去洗鞋店,這個時候,有個洗鞋店小程序就可以進行上門取件,幫助沒時間的客戶去取需要清洗的鞋子,這樣豈不是既幫…

Node.js EventEmitter 深入解析

Node.js EventEmitter 深入解析 概述 Node.js 作為一種強大的 JavaScript 運行環境,以其異步、事件驅動特性在服務器端編程中占據了重要地位。EventEmitter 是 Node.js 中處理事件的一種機制,它允許對象(稱為“發射器”)發出事件…

C++11QT復習 (十九)

文章目錄 Day13 C 時間庫和線程庫學習筆記&#xff08;Chrono 與 Thread&#xff09;一、時間庫 <chrono>1.1 基本概念1.2 使用示例1.3 duration 字面量單位 二、線程庫 <thread>2.1 基本用法2.2 數據競爭&#xff08;Race Condition&#xff09;2.3 加鎖&#xff…

C++初階-C++的講解1

目錄 1.缺省(sheng)參數 2.函數重載 3.引用 3.1引用的概念和定義 3.2引用的特性 3.3引用的使用 3.4const引用 3.5.指針和引用的關系 4.nullptr 5.總結 1.缺省(sheng)參數 &#xff08;1&#xff09;缺省參數是聲明或定義是為函數的參數指定一個缺省值。在調用該函數是…

Redisson 實現分布式鎖

在平常的開發工作中&#xff0c;我們經常會用到鎖&#xff0c;那么鎖有什么用呢&#xff1f;鎖主要是控制對共享資源的訪問順序&#xff0c;防止多個線程并發操作導致數據不一致的問題。經常可能會聽到樂觀鎖、悲觀鎖、分布式鎖、行鎖、表鎖等等&#xff0c;那么我們今天總結下…

環境—Ubuntu24(py3.12)安裝streamlit(虛擬環境py3.9)

請盡可能不用Ubuntu24請直接跳7.查看解決方案 Action Log 在Ubuntu 24.04中更換為清華源的步驟【Bug】Python 3.12 on Ubuntu 24.04 is Externally Managed - PIP is broken 相關解決方案 從 Ubuntu 24.04 開始&#xff0c;有兩個選項&#xff1a; 1. install python pacakg…

【C++進階】關聯容器:set類型

目錄 一、set 基本概念 1.1 定義與特點 1.2 頭文件與聲明 1.3 核心特性解析 二、set 底層實現 2.1 紅黑樹簡介 2.2 紅黑樹在 set 中的應用 三、set 常用操作 3.1 插入元素 3.2 刪除元素 3.3 查找元素 3.4 遍歷元素 3.5 性能特征 四、set 高級應用 4.1 自定義比較…

[漏洞篇]SSRF漏洞詳解

[漏洞篇]SSRF漏洞詳解 免責聲明&#xff1a; 本文主要講解漏洞原理&#xff0c;以及防御手段&#xff0c;旨在幫助大家更好的了解漏洞危害&#xff0c;以及開發中所需要的點&#xff0c;切勿拿來做違法事情&#xff0c;否則后果自負。 一、介紹 概念 SSRF&#xff1a;服務端請…