Requests:第三方封裝的用于網(wǎng)絡(luò)請(qǐng)求操作的一個(gè)模塊,主要用于爬蟲程序的開發(fā),尤其以開發(fā)簡(jiǎn)單,上手容易、操作靈活、開發(fā)效率高著稱,所以在實(shí)際項(xiàng)目操作過程中,requests模塊是使用最多的爬蟲操作模塊。
1. 安裝
pip install requests
#或者
easy_install requests
簡(jiǎn)單爬蟲案例:
#引入需要的模塊
import requests
#發(fā)送請(qǐng)求得到相應(yīng)數(shù)據(jù)
response = requests.get("https://www.taobao.com")
#打印展示獲取的數(shù)據(jù)
print(response.text)
2. 各種設(shè)置
2.1請(qǐng)求方式
通過request直接調(diào)?用對(duì)應(yīng)的函數(shù)/?方法即可完成
一般只有 requests.get 和 requests.post 。-
2.2 附帶普通參數(shù)的請(qǐng)求
參數(shù)包含在?一個(gè)字典對(duì)象中,將字典對(duì)象交給requests的函數(shù)即可。# get 方式發(fā)送請(qǐng)求,包含參數(shù),用 params 接收 res = requests.get(URL, params = data) # post 方式發(fā)送請(qǐng)求,包含參數(shù) ,用 data 接收 res = requests.post(URL, data = data) -
2.3 傳遞JSON參數(shù)
在請(qǐng)求的過程中,有些URL接口需要的參數(shù)數(shù)據(jù)并不不是零散的數(shù)據(jù),而是需要封裝在一起的JSON數(shù)據(jù),此時(shí)數(shù)據(jù)需要轉(zhuǎn)化為json格式。# 引?入需要的模塊 imoprt json # 封裝參數(shù)的字典 data = {“city”:”鄭州”} # 轉(zhuǎn)換參數(shù) json_data = json.dumps(data) get(url, json=..)--無效 post(url, json=..)--常規(guī)操作[使用非常少],一般用data傳遞 -
2.4 返回的數(shù)據(jù)和它編碼操作
返回的數(shù)據(jù),可以根據(jù)數(shù)據(jù)的編碼類型區(qū)分為二進(jìn)制數(shù)據(jù)和文本數(shù)據(jù),兩種不同的數(shù)據(jù)通過兩個(gè)不同的屬性進(jìn)行獲取。response.content:獲取響應(yīng)中包含的二進(jìn)制數(shù)據(jù) response.text:獲取響應(yīng)中包含的文本數(shù)據(jù)
如果出現(xiàn)亂碼,可通過response的屬性encoding,
進(jìn)行編碼的獲取和指定
response.encoding = “編碼(utf-8)” -
2.5 文件上傳操作
requests對(duì)象支持文件的數(shù)據(jù)流式處理,不需要將整個(gè)文件都加載到內(nèi)存中,而是讀取一部分傳遞一部分,將文件指定給requests請(qǐng)求的file參數(shù)即可。注意:文件的上傳操作只能通過post()請(qǐng)求方式執(zhí)行操作
# 1.整個(gè)文件讀取 import requests # 打開文件 f = open(“d:/test.txt”, “r”) # 包裝文件參數(shù) file = {“file”:f} # 傳遞文件 response = requests.post(URL, files=file) #2.流式數(shù)據(jù)傳遞方式 import requests # 打開文件 with open(“d:/test.txt”, “r”) as f: response = requests.post(URL, data=f) -
2.6 cookie操作
requests模塊中對(duì)cookie的操作進(jìn)行了封裝,可以直接通過響應(yīng)對(duì)象的cookie屬性進(jìn)行操作。import requests response = request(“http://www.badiu.com ” ) # 獲取整個(gè)cookie print(response.cookies) # 根據(jù)key獲取指定的值 print(r.cookies[“key”]) -
2.7 請(qǐng)求超時(shí)設(shè)置
如果要求對(duì)于數(shù)據(jù)操作性能有要求的話,可以通過傳遞timeout參數(shù)數(shù)據(jù)進(jìn)行超時(shí)時(shí)間的設(shè)置,超過超時(shí)時(shí)間的連接自動(dòng) 拋出異常。import requests response = requests.get(“http://github.com ” , timeout=0.1) 異常信息:requests.exceptions.ConnectTimeout -
2.8 讓多個(gè)請(qǐng)求包含在一個(gè)會(huì)話中
一般情況下,爬蟲操作獲取目標(biāo)數(shù)據(jù)都是短連接,也就是獲取數(shù)據(jù)時(shí)連接服務(wù)器,每次發(fā)起請(qǐng)求就是一個(gè)連接,獲取到服務(wù)器的響應(yīng)數(shù)據(jù)后連接自動(dòng)斷開,再次發(fā)起請(qǐng)求時(shí)又是一個(gè)新的請(qǐng)求對(duì)象了。import requests response1 =requests.get() response2 = requests.get() #上面的代碼中,兩次請(qǐng)求就不是同一個(gè)會(huì)話。 #如果要進(jìn)行多個(gè)請(qǐng)求包含在同一個(gè)會(huì)話中, #通過requests模塊的會(huì)話對(duì)象Session()構(gòu)建一個(gè)會(huì)話請(qǐng)求進(jìn)行操作即可。 import requests req = requests.Session() response1 = req.get() response2 = req.get() -
2.9 SSL證書設(shè)置
讓爬蟲程序類似瀏覽器一樣驗(yàn)證https協(xié)議訪問的網(wǎng)站,當(dāng)網(wǎng)站的SSL無效時(shí),爬蟲無法訪問,需要關(guān)閉HTTPS的SSL證書驗(yàn)證,通過設(shè)置請(qǐng)求參數(shù)verify=False關(guān)閉該驗(yàn)證。response = requests.get(URL,verify=False) -
2.10 代理設(shè)置
和urllib2一樣,爬蟲操作過程中,代理的設(shè)置是不可避免的一種技術(shù)手段。在requests模塊中,通過將代理服務(wù)器端口配置在字典中,然后通過proxies參數(shù)進(jìn)行設(shè)置即可。import requests proxies = { "https":"122.72.32.75:80" } response = requests.get(URL, proxies=proxies) print (response.text)