日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python request库_【Python爬虫】Request库入门

發(fā)布時(shí)間:2023/12/10 python 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python request库_【Python爬虫】Request库入门 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

什么是爬蟲?

網(wǎng)絡(luò)爬蟲(又被稱為網(wǎng)頁蜘蛛,網(wǎng)絡(luò)機(jī)器人,在FOAF社區(qū)中間,更經(jīng)常的稱為網(wǎng)頁追逐者),是一種按照一定的規(guī)則,自動(dòng)地抓取萬維網(wǎng)信息的程序或者腳本。另外一些不常使用的名字還有螞蟻、自動(dòng)索引、模擬程序或者蠕蟲。

其實(shí)通俗的講就是通過程序去獲取web頁面上自己想要的數(shù)據(jù),也就是自動(dòng)抓取數(shù)據(jù)。

你可以爬去妹子的圖片,爬取自己想看看的視頻。。等等你想要爬取的數(shù)據(jù),只要你能通過瀏覽器訪問的數(shù)據(jù)都可以通過爬蟲獲取

爬蟲的本質(zhì)

模擬瀏覽器打開網(wǎng)頁,獲取網(wǎng)頁中我們想要的那部分?jǐn)?shù)據(jù)

瀏覽器打開網(wǎng)頁的過程:

當(dāng)你在瀏覽器中輸入地址后,經(jīng)過DNS服務(wù)器找到服務(wù)器主機(jī),向服務(wù)器發(fā)送一個(gè)請(qǐng)求,服務(wù)器經(jīng)過解析后發(fā)送給用戶瀏覽器結(jié)果,包括html,js,css等文件內(nèi)容,瀏覽器解析出來最后呈現(xiàn)給用戶在瀏覽器上看到的結(jié)果

所以用戶看到的瀏覽器的結(jié)果就是由HTML代碼構(gòu)成的,我們爬蟲就是為了獲取這些內(nèi)容,通過分析和過濾html代碼,從中獲取我們想要資源(文本,圖片,視頻.....)

爬蟲的基本流程

發(fā)起請(qǐng)求

通過HTTP庫(kù)向目標(biāo)站點(diǎn)發(fā)起請(qǐng)求,也就是發(fā)送一個(gè)Request,請(qǐng)求可以包含額外的header等信息,等待服務(wù)器響應(yīng)

獲取響應(yīng)內(nèi)容

如果服務(wù)器能正常響應(yīng),會(huì)得到一個(gè)Response,Response的內(nèi)容便是所要獲取的頁面內(nèi)容,類型可能是HTML,Json字符串,二進(jìn)制數(shù)據(jù)(圖片或者視頻)等類型

解析內(nèi)容

得到的內(nèi)容可能是HTML,可以用正則表達(dá)式,頁面解析庫(kù)進(jìn)行解析,可能是Json,可以直接轉(zhuǎn)換為Json對(duì)象解析,可能是二進(jìn)制數(shù)據(jù),可以做保存或者進(jìn)一步的處理

保存數(shù)據(jù)

保存形式多樣,可以存為文本,也可以保存到數(shù)據(jù)庫(kù),或者保存特定格式的文件

Request,Response

瀏覽器發(fā)送消息給網(wǎng)址所在的服務(wù)器,這個(gè)過程就叫做HTPP Request

服務(wù)器收到瀏覽器發(fā)送的消息后,能夠根據(jù)瀏覽器發(fā)送消息的內(nèi)容,做相應(yīng)的處理,然后把消息回傳給瀏覽器,這個(gè)過程就是HTTP Response

瀏覽器收到服務(wù)器的Response信息后,會(huì)對(duì)信息進(jìn)行相應(yīng)的處理,然后展示

Request中包含什么?

請(qǐng)求方式

主要有:GET/POST兩種類型常用,另外還有HEAD/PUT/DELETE/OPTIONS

GET和POST的區(qū)別就是:請(qǐng)求的數(shù)據(jù)GET是在url中,POST則是存放在頭部

GET:向指定的資源發(fā)出“顯示”請(qǐng)求。使用GET方法應(yīng)該只用在讀取數(shù)據(jù),而不應(yīng)當(dāng)被用于產(chǎn)生“副作用”的操作中,例如在Web Application中。其中一個(gè)原因是GET可能會(huì)被網(wǎng)絡(luò)蜘蛛等隨意訪問

POST:向指定資源提交數(shù)據(jù),請(qǐng)求服務(wù)器進(jìn)行處理(例如提交表單或者上傳文件)。數(shù)據(jù)被包含在請(qǐng)求本文中。這個(gè)請(qǐng)求可能會(huì)創(chuàng)建新的資源或修改現(xiàn)有資源,或二者皆有。

HEAD:與GET方法一樣,都是向服務(wù)器發(fā)出指定資源的請(qǐng)求。只不過服務(wù)器將不傳回資源的本文部分。它的好處在于,使用這個(gè)方法可以在不必傳輸全部?jī)?nèi)容的情況下,就可以獲取其中“關(guān)于該資源的信息”(元信息或稱元數(shù)據(jù))。

PUT:向指定資源位置上傳其最新內(nèi)容。

OPTIONS:這個(gè)方法可使服務(wù)器傳回該資源所支持的所有HTTP請(qǐng)求方法。用'*'來代替資源名稱,向Web服務(wù)器發(fā)送OPTIONS請(qǐng)求,可以測(cè)試服務(wù)器功能是否正常運(yùn)作。

DELETE:請(qǐng)求服務(wù)器刪除Request-URI所標(biāo)識(shí)的資源。

請(qǐng)求URL

URL,即統(tǒng)一資源定位符,也就是我們說的網(wǎng)址,統(tǒng)一資源定位符是對(duì)可以從互聯(lián)網(wǎng)上得到的資源的位置和訪問方法的一種簡(jiǎn)潔的表示,是互聯(lián)網(wǎng)上標(biāo)準(zhǔn)資源的地址。互聯(lián)網(wǎng)上的每個(gè)文件都有一個(gè)唯一的URL,它包含的信息指出文件的位置以及瀏覽器應(yīng)該怎么處理它。

URL的格式由三個(gè)部分組成:

第一部分是協(xié)議(或稱為服務(wù)方式)。

第二部分是存有該資源的主機(jī)IP地址(有時(shí)也包括端口號(hào))。

第三部分是主機(jī)資源的具體地址,如目錄和文件名等。

爬蟲爬取數(shù)據(jù)時(shí)必須要有一個(gè)目標(biāo)的URL才可以獲取數(shù)據(jù),因此,它是爬蟲獲取數(shù)據(jù)的基本依據(jù)。

請(qǐng)求頭

包含請(qǐng)求時(shí)的頭部信息,如User-Agent,Host,Cookies等信息,下圖是請(qǐng)求請(qǐng)求百度時(shí),所有的請(qǐng)求頭部信息參數(shù)

請(qǐng)求體

請(qǐng)求是攜帶的數(shù)據(jù),如提交表單數(shù)據(jù)時(shí)候的表單數(shù)據(jù)(POST)

Response中包含了什么

所有HTTP響應(yīng)的第一行都是狀態(tài)行,依次是當(dāng)前HTTP版本號(hào),3位數(shù)字組成的狀態(tài)代碼,以及描述狀態(tài)的短語,彼此由空格分隔。

響應(yīng)狀態(tài)

有多種響應(yīng)狀態(tài),如:200代表成功,301跳轉(zhuǎn),404找不到頁面,502服務(wù)器錯(cuò)誤

1xx消息——請(qǐng)求已被服務(wù)器接收,繼續(xù)處理

2xx成功——請(qǐng)求已成功被服務(wù)器接收、理解、并接受

3xx重定向——需要后續(xù)操作才能完成這一請(qǐng)求

4xx請(qǐng)求錯(cuò)誤——請(qǐng)求含有詞法錯(cuò)誤或者無法被執(zhí)行

5xx服務(wù)器錯(cuò)誤——服務(wù)器在處理某個(gè)正確請(qǐng)求時(shí)發(fā)生錯(cuò)誤 常見代碼: 200 OK 請(qǐng)求成功 400 Bad Request 客戶端請(qǐng)求有語法錯(cuò)誤,不能被服務(wù)器所理解 401 Unauthorized 請(qǐng)求未經(jīng)授權(quán),這個(gè)狀態(tài)代碼必須和WWW-Authenticate報(bào)頭域一起使用 403 Forbidden 服務(wù)器收到請(qǐng)求,但是拒絕提供服務(wù) 404 Not Found 請(qǐng)求資源不存在,eg:輸入了錯(cuò)誤的URL 500 Internal Server Error 服務(wù)器發(fā)生不可預(yù)期的錯(cuò)誤 503 Server Unavailable 服務(wù)器當(dāng)前不能處理客戶端的請(qǐng)求,一段時(shí)間后可能恢復(fù)正常 301 目標(biāo)永久性轉(zhuǎn)移 302 目標(biāo)暫時(shí)性轉(zhuǎn)移

響應(yīng)頭

如內(nèi)容類型,類型的長(zhǎng)度,服務(wù)器信息,設(shè)置Cookie,如下圖

響應(yīng)體

最主要的部分,包含請(qǐng)求資源的內(nèi)容,如網(wǎng)頁HTMl,圖片,二進(jìn)制數(shù)據(jù)等

能爬取什么樣的數(shù)據(jù)

網(wǎng)頁文本:如HTML文檔,Json格式化文本等

圖片:獲取到的是二進(jìn)制文件,保存為圖片格式

視頻:同樣是二進(jìn)制文件

其他:只要請(qǐng)求到的,都可以獲取

如何解析數(shù)據(jù)

直接處理

Json解析

正則表達(dá)式處理

BeautifulSoup解析處理

PyQuery解析處理

XPath解析處理

關(guān)于抓取的頁面數(shù)據(jù)和瀏覽器里看到的不一樣的問題

出現(xiàn)這種情況是因?yàn)?#xff0c;很多網(wǎng)站中的數(shù)據(jù)都是通過js,ajax動(dòng)態(tài)加載的,所以直接通過get請(qǐng)求獲取的頁面和瀏覽器顯示的不同。

如何解決js渲染的問題?

分析ajax

Selenium/webdriver

Splash

PyV8,Ghost.py

怎樣保存數(shù)據(jù)

文本:純文本,Json,Xml等

關(guān)系型數(shù)據(jù)庫(kù):如mysql,oracle,sql server等結(jié)構(gòu)化數(shù)據(jù)庫(kù)

非關(guān)系型數(shù)據(jù)庫(kù):MongoDB,Redis等key-value形式存儲(chǔ)

什么是Requests

Requests是用python語言基于urllib編寫的,采用的是Apache2 Licensed開源協(xié)議的HTTP庫(kù)

如果你看過上篇文章關(guān)于urllib庫(kù)的使用,你會(huì)發(fā)現(xiàn),其實(shí)urllib還是非常不方便的,而Requests它會(huì)比urllib更加方便,可以節(jié)約我們大量的工作。(用了requests之后,你基本都不愿意用urllib了)一句話,requests是python實(shí)現(xiàn)的最簡(jiǎn)單易用的HTTP庫(kù),建議爬蟲使用requests庫(kù)。

默認(rèn)安裝好python之后,是沒有安裝requests模塊的,需要單獨(dú)通過pip安裝

pip install requests

requests功能詳解

總體功能的一個(gè)演示

importrequests

response= requests.get("https://www.baidu.com")print(type(response))print(response.status_code)#狀態(tài)碼

print(type(response.text))print(response.text)#打印網(wǎng)頁內(nèi)容

print(response.cookies)print(response.content)print(response.content.decode("utf-8"))#改變編碼

我們可以看出response使用起來確實(shí)非常方便,這里有個(gè)問題需要注意一下:

很多情況下的網(wǎng)站如果直接response.text會(huì)出現(xiàn)亂碼的問題,所以這個(gè)使用response.content

這樣返回的數(shù)據(jù)格式其實(shí)是二進(jìn)制格式,然后通過decode()轉(zhuǎn)換為utf-8,這樣就解決了通過response.text直接返回顯示亂碼的問題.

請(qǐng)求發(fā)出后,Requests 會(huì)基于 HTTP 頭部對(duì)響應(yīng)的編碼作出有根據(jù)的推測(cè)。當(dāng)你訪問 response.text 之時(shí),Requests 會(huì)使用其推測(cè)的文本編碼。你可以找出 Requests 使用了什么編碼,并且能夠使用 response.encoding 屬性來改變它.如:

response =requests.get("http://www.baidu.com")

response.encoding="utf-8"

print(response.text)

不管是通過response.content.decode("utf-8)的方式還是通過response.encoding="utf-8"的方式都可以避免亂碼的問題發(fā)生

各種請(qǐng)求方式

requests里提供個(gè)各種請(qǐng)求方式

Requests庫(kù)的get()方法

實(shí)踐:

爬取網(wǎng)頁的通用代碼框架

運(yùn)行

importrequests

r= requests.get("https://www.baidu.com")

r.status_code#獲取網(wǎng)站狀態(tài)碼

r.text#獲取內(nèi)容

r.encoding#獲取編碼

r.apparent_encoding#獲取另一個(gè)編碼

r.encoding='utf-8'#替換編碼為'UTF-8'

會(huì)發(fā)現(xiàn)一個(gè)亂碼,一個(gè)正常,是因?yàn)?/p>

代碼:

importrequestsdefgetHTMLText(url):try:

r=requests.get(url,timeout=30)

r.raise_for_status()#如果狀態(tài)碼不是200,就引發(fā)HTTPError異常

r.encoding=r.apparent_encoding #替換編碼

return r.text #返回網(wǎng)頁內(nèi)容

except:return "產(chǎn)生異常啦!"

url="www.baidu.com/"

print(getHTMLText(url))

HTTP協(xié)議及Requests庫(kù)方法

總結(jié)

以上是生活随笔為你收集整理的python request库_【Python爬虫】Request库入门的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。