urllib3使用池管理發送請求和requests常用方法的基本使用+session使用


使用urllib3的池管理器

   urllib3是在urllib進行更加深入的改進,最大的好處就是在urllib的基礎上添加了池管理,以至於我們不需要再去注意我們需要由那個鏈接去發送請求,而只需要獲取到鏈接發送回來的相應的數據。這樣就可以大大減少我們對於鏈接的管理。

  urllib3的請求發送其實很簡單,只是將需要發送請求的鏈接添加到池中,池管理器就會自動按照流程繼續流程進行信息的發送。

  以下面一個例子進行簡單的聯系。

 1 '''
 2 @Description: 使用urllib3中的鏈接池發送請求
 3 @Version: 1.0
 4 @Autor: Montoin Yan
 5 @Date: 2020-02-01 17:38:54
 6 @LastEditors  : Montoin Yan
 7 @LastEditTime : 2020-02-04 19:15:02
 8 '''
 9 import urllib3
10 from urllib import parse
11 import simplejson
12 import random
13 
14 #設置多個請求頭,防止被反扒措施進行攔截
15 ua_list = [
16     "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:72.0) Gecko/20100101 Firefox/72.0",
17     "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.29 Safari/537.36",
18     "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.18362",
19     "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3741.400 QQBrowser/10.5.3863.400"
20 ]
21 #隨機pick one
22 ua = random.choice(ua_list)
23 
24 #以https://movie.douban.com/j/search_subjects?type=movie&tag=%E7%83%AD%E9%97%A8&page_limit=10&page_start=0 為例
25 #將鏈接進行分割,將Ajax需要傳遞的參數存儲到字典中
26 url = "https://movie.douban.com/j/search_subjects"
27 d = {
28     'type':'movie',
29     'tag':'熱門',
30     'page_limit':'10', 
31     'page_start':'0'
32 } 
33 
34 #使用urllib3中的池管理方法進行連接。
35 with urllib3.PoolManager() as http:
36     response = http.request('GET','{}?{}'.format(url,parse.urlencode(d)),headers={
37     'User-agent':ua
38     })
39     print(type(response)) #獲取方法響應的類型
40     print(response.status,response.reason) #獲取狀態碼和響應結果
41     # print(response.headers) #獲取頭信息
42     # print(response.data) #獲取數據

 

 requests庫的常用的方法

  requests庫使用了urllib3的內容,他的API的使用比urllib3更加的友好,同時他也在urllib3 的基礎上添加了許多的方法,同時去除了urllib3中的糟粕。requests中提供了method方法,使得我們可以在發送請求的同時可以指定發送請求的類型。

  同時,為了管理請求更加方便,它采用session的方式進行回話的保持,使得我們能夠在session和cookie之間來回進行信息的傳遞。

  下面的兩段代碼大體實現了requests的常用方法和session發送請求的基本方式。

 1 '''
 2 @Description: 
 3 @Version: 1.0
 4 @Autor: Montoin Yan
 5 @Date: 2020-02-04 19:14:12
 6 @LastEditors  : Montoin Yan
 7 @LastEditTime : 2020-02-04 20:30:20
 8 '''
 9 
10 import requests
11 from urllib.parse import urlencode
12 import random
13 
14 #設置多個請求頭,防止被反扒措施進行攔截
15 ua_list = [
16     "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:72.0) Gecko/20100101 Firefox/72.0",
17     "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.29 Safari/537.36",
18     "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.18362",
19     "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3741.400 QQBrowser/10.5.3863.400"
20 ]
21 #隨機pick one
22 ua = random.choice(ua_list)
23 
24 #以https://movie.douban.com/j/search_subjects?type=movie&tag=%E7%83%AD%E9%97%A8&page_limit=10&page_start=0 為例
25 #將鏈接進行分割,將Ajax需要傳遞的參數存儲到字典中
26 j_url = "https://movie.douban.com/j/search_subjects"
27 d = {
28     'type':'movie',
29     'tag':'最新',
30     'page_limit':'10', 
31     'page_start':'0'
32 } 
33 url = '{}?{}'.format(j_url,urlencode(d)) #必須進行轉碼,否則無法獲取到數據
34 response = requests.request('GET',url,headers={
35     'User-agent':ua
36 })
37 
38 with response:
39     print(response.status_code) #打印響應的狀態碼
40     print(type(response)) #打印響應的response的類型
41     print(response.url) #打印最終響應的url
42     print(response.headers) #打印響應的頭信息
43     print(response.request.headers) #打印發送請求的頭信息
44     print(response.text[:200]) #當我們獲取到的數據量比較大的時候,為了方便進行驗證,可以將獲取到的網頁數據轉換為文本格式並進行切片處理
45     

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM