Python爬蟲(chóng)筆記(二)requests模塊get,post,代理


一、使用步驟:

1.導(dǎo)包

? import requests

2、確定基礎(chǔ)url

? base_url = 'https://www.baidu.com'

3、發(fā)送請(qǐng)求,獲取響應(yīng)

? response = requests.get(base_url)

4、處理響應(yīng)內(nèi)容

二、requests.get()—get請(qǐng)求方法參數(shù)詳解

(1)requests.get(

? ? ? ? url=請(qǐng)求url,

? ? ? ? headers =請(qǐng)求頭字典,

? ? ? ? params = 請(qǐng)求參數(shù)字典。

? ? ? ? timeout = 超時(shí)時(shí)長(zhǎng),

? ? )---->response對(duì)象

(2)response對(duì)象的屬性:

? 服務(wù)器響應(yīng)包含:狀態(tài)行(協(xié)議,狀態(tài)碼)、響應(yīng)頭,空行,響應(yīng)正文


? (1)響應(yīng)正文:

? ? 字符串格式:response.text

? ? bytes類型:response.content


? (2)狀態(tài)碼:response.status_code


? (3)響應(yīng)頭:response.headers(字典)

? ? ? ? response.headers['cookie']


? (4)響應(yīng)正文的編碼:response.encoding

? ? response.text獲取到的字符串類型的響應(yīng)正文,

? ? 其實(shí)是通過(guò)下面的步驟獲取的:

? ? ? ? response.text = response.content.decode(response.encoding)

? (5)亂碼問(wèn)題的解決辦法:

? ? 產(chǎn)生的原因:編碼和解碼的編碼格式不一致造成的。

? ? ? ? str.encode('編碼')---將字符串按指定編碼解碼成bytes類型

? ? ? ? bytes.decode('編碼')---將bytes類型按指定編碼編碼成字符串。


? ? a、response.content.decode('頁(yè)面正確的編碼格式')

? ? ? ? <meta http-equiv="content-type" content="text/html;charset=utf-8">


? ? b、找到正確的編碼,設(shè)置到response.encoding中

? ? ? ? response.encoding = 正確的編碼

? ? ? ? response.text--->正確的頁(yè)面內(nèi)容。

(3)get請(qǐng)求項(xiàng)目總結(jié):

? a、沒(méi)有請(qǐng)求參數(shù)的情況下,只需要確定url和headers字典。


? b、get請(qǐng)求是有請(qǐng)求參數(shù)。

? ? 在chrome瀏覽器中,下面找query_string_params,

? ? 將里面的參數(shù)封裝到params字典中。


? c、分頁(yè)主要是查看每頁(yè)中,請(qǐng)求參數(shù)頁(yè)碼字段的變化,

? 找到變化規(guī)律,用for循環(huán)就可以做到分頁(yè)。

三、post請(qǐng)求:

? requests.post(

? ? url=請(qǐng)求url,

? ? headers = 請(qǐng)求頭字典,

? ? data=請(qǐng)求數(shù)據(jù)字典

? ? timeout=超時(shí)時(shí)長(zhǎng)


? )---response對(duì)象

? post請(qǐng)求一般返回?cái)?shù)據(jù)都是json數(shù)據(jù)。

解析json數(shù)據(jù)的方法:

(1)response.json()--->json字符串所對(duì)應(yīng)的python的list或者dict

(2)用 json 模塊。

? ? json.loads(json_str)---->json_data(python的list或者dict)

? ? json.dumps(json_data)--->json_str


? post請(qǐng)求能否成功,關(guān)鍵看**請(qǐng)求參數(shù)**。

? 如何查找是哪個(gè)請(qǐng)求參數(shù)在影響數(shù)據(jù)獲???

? --->通過(guò)對(duì)比,找到變化的參數(shù)。

? 變化參數(shù)如何找到參數(shù)的生成方式,就是解決這個(gè)ajax請(qǐng)求數(shù)據(jù)獲取的途徑。

**尋找的辦法**有以下幾種:

? ? (1)寫死在頁(yè)面。

? ? (2)寫在js中。

? ? (3)請(qǐng)求參數(shù)是在之前的一條ajax請(qǐng)求的數(shù)據(jù)里面提前獲取好的。

四、代理使用方法

(1)代理基本原理:

? 代理形象的說(shuō),他是網(wǎng)絡(luò)信息中轉(zhuǎn)站。

? 實(shí)際上就是在本機(jī)和服務(wù)器之間架了一座橋。

(2)代理的作用:

? a、突破自身ip訪問(wèn)現(xiàn)實(shí),可以訪問(wèn)一些平時(shí)訪問(wèn)不到網(wǎng)站。

? b、訪問(wèn)一些單位或者團(tuán)體的資源。

? c、提高訪問(wèn)速度。代理的服務(wù)器主要作用就是中轉(zhuǎn),

? 所以一般代理服務(wù)里面都是用內(nèi)存來(lái)進(jìn)行數(shù)據(jù)存儲(chǔ)的。

? d、隱藏ip。

(3)代理的分類:

? 1、按照協(xié)議進(jìn)行劃分:

? ? FTP代理服務(wù)器---21,2121

? ? HTTP代理服務(wù)器---80,8080

? ? SSL/TLS代理:主要用訪問(wèn)加密網(wǎng)站。端口:443

? ? telnet代理 :主要用telnet遠(yuǎn)程控制,端口一般為23


? 2、按照匿名程度:

? ? 高度匿名代理:數(shù)據(jù)包會(huì)原封不動(dòng)轉(zhuǎn)化,在服務(wù)段看來(lái),就好像一個(gè)普通用戶在訪問(wèn),做到完全隱藏ip。

? ? 普通匿名代理:數(shù)據(jù)包會(huì)做一些改動(dòng),服務(wù)器有可能找到原ip。

? ? 透明代理:不但改動(dòng)數(shù)據(jù),還會(huì)告訴服務(wù),是誰(shuí)訪問(wèn)的。

? ? 間諜代理:指組織或者個(gè)人用于記錄用戶傳輸數(shù)據(jù),然后進(jìn)行研究,監(jiān)控等目的的代理。? ?

(4)在requests模塊中如何設(shè)置代理?

? proxies = {

? ? '代理服務(wù)器的類型':'代理ip'

? }

? response = requests.get(proxies = proxies)

? 代理服務(wù)器的類型:http,https,ftp

? 代理ip:http://ip:port

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容