一、使用步驟:
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