激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - python爬蟲之urllib3的使用示例

python爬蟲之urllib3的使用示例

2021-03-15 00:06瀟瀟漓燃 Python

這篇文章主要介紹了 python爬蟲之urllib3的使用示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

Urllib3是一個功能強大,條理清晰,用于HTTP客戶端的Python庫。許多Python的原生系統(tǒng)已經開始使用urllib3。Urllib3提供了很多python標準庫urllib里所沒有的重要特性:

  1. 線程安全
  2. 連接池
  3. 客戶端SSL/TLS驗證
  4. 文件分部編碼上傳
  5. 協(xié)助處理重復請求和HTTP重定位
  6. 支持壓縮編碼
  7. 支持HTTP和SOCKS代理

一、get請求

urllib3主要使用連接池進行網絡請求的訪問,所以訪問之前我們需要創(chuàng)建一個連接池對象,如下所示:

?
1
2
3
4
5
6
7
8
9
10
11
import urllib3
 
url = "http://httpbin.org"
http = urllib3.PoolManager();
r = http.request('GET',url+"/get")
print(r.data.decode())
print(r.status)
 
帶參數(shù)的get
r = http.request('get','http://www.baidu.com/s',fields={'wd':'周杰倫'})
print(r.data.decode())

經查看源碼:

?
1
def request(self, method, url, fields=None, headers=None, **urlopen_kw):
  • 第一個參數(shù)method 必選,指定是什么請求,'get'、'GET'、'POST'、'post'、'PUT'、'DELETE'等,不區(qū)分大小寫。
  • 第二個參數(shù)url,必選
  • 第三個參數(shù)fields,請求的參數(shù),可選
  • 第四個參數(shù)headers 可選

request請求的返回值是<urllib3.response.HTTPResponse object at 0x000001B3879440B8>

我們可以通過dir()查看其所有的屬性和方法。

dir(r)

直截取了一部分

?
1
2
3
4
5
6
#'data', 'decode_content', 'enforce_content_length', 'fileno', 'flush', 'from_httplib',
# 'get_redirect_location', 'getheader', 'getheaders', 'headers', 'info', 'isatty',
# 'length_remaining', 'read', 'read_chunked', 'readable', 'readinto', 'readline',
# 'readlines', 'reason', 'release_conn', 'retries', 'seek', 'seekable', 'status',
# 'stream', 'strict', 'supports_chunked_reads', 'tell', 'truncate', 'version', 'writable',
# 'writelines']

二、post請求

?
1
2
3
4
5
6
7
8
import urllib3
url = "http://httpbin.org"
fields = {
  'name':'xfy'
}
http = urllib3.PoolManager()
r = http.request('post',url+"/post",fields=fields)
print(r.data.decode())

可以看到很簡單,只是第一個參數(shù)get換成了post。

并且參數(shù)不需要再像urllib一樣轉換成byte型了。

三、設置headers

?
1
2
3
4
5
6
7
import urllib3
headers = {
   'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36'
}
http = urllib3.PoolManager();
r = http.request('get',url+"/get",headers = headers)
print(r.data.decode())

四、設置代理

?
1
2
3
4
5
6
7
8
import urllib3
url = "http://httpbin.org"
headers = {
   'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36'
}
proxy = urllib3.ProxyManager('http://101.236.19.165:8866',headers = headers)
r = proxy.request('get',url+"/ip")
print(r.data.decode())

五、當請求的參數(shù)為json

在發(fā)起請求時,可以通過定義body 參數(shù)并定義headers的Content-Type參數(shù)來發(fā)送一個已經過編譯的JSON數(shù)據(jù)

?
1
2
3
4
5
6
7
8
9
10
import urllib3
url = "http://httpbin.org"
import json
data = {'name':'徐繁韻'}
 
json_data = json.dumps(data)
 
http = urllib3.PoolManager()
r = http.request('post',url+"/post",body = json_data,headers = {'Content-Type':'application/json'})
print(r.data.decode('unicode_escape'))

六、上傳文件

?
1
2
3
4
5
6
7
8
9
10
11
#元組形式
with open('a.html','rb') as f:
  data = f.read()
http = urllib3.PoolManager()
r = http.request('post','http://httpbin.org/post',fields = {'filefield':('a.html',data,'text/plain')})
print(r.data.decode())
 
#二進制形式
 
r = http.request('post','http://httpbin.org/post',body = data,headers={'Content-Type':'image/jpeg'})
print(r.data.decode())

七、超時設置

?
1
2
3
4
# 1全局設置超時
# http = urllib3.PoolManager(timeout = 3)
# 2在request里設置
# http.request('post','http://httpbin.org/post',timeout = 3)

八、重試和重定向

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import urllib3
http = urllib3.PoolManager()
#重試
r = http.request('post','http://httpbin.org/post',retries = 5) #請求重試測次數(shù)為5次 ,默認為3ci
print(r.retries) #Retry(total=5, connect=None, read=None, redirect=0, status=None)
#關閉重試
http.request('post','http://httpbin.org/post',retries = False) #請求重試測次數(shù)為5次 ,默認為3ci
 
r = http.request('get','http://httpbin.org/redirect/1',redirect = False)
print(r.retries)# Retry(total=3, connect=None, read=None, redirect=None, status=None)
print(r.status)
print(r.data.decode())
print("--------------------")
print(r.get_redirect_location())
#302不是異常

九、urllib3 本身設置了https的處理,但是有警告

雖然可以請求,但是報如下警告:

InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings
  InsecureRequestWarning)

禁用警告:

?
1
2
3
4
5
6
import urllib3
urllib3.disable_warnings() #禁用各種警告
url = "https://www.12306.cn/mormhweb/"
http = urllib3.PoolManager()
r = http.request('get',url)
print(r.data.decode())

urllib3很強大,但是并沒有requests好用。了解為主。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:https://www.jianshu.com/p/cc2b9e9ef28a

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产一区视频免费观看 | 久久久久久久一区 | 国产精品成人一区二区三区吃奶 | 国产亚洲精品久久久久5区 综合激情网 | 免费在线观看成人av | 黄色成人小视频 | 一级黄色免费观看 | 久草视频免费 | 成人免费视频视频在线观看 免费 | 欧美大逼网 | 91成人影院| 最新中文字幕免费视频 | 国内精品伊人久久 | 黄色片网站在线免费观看 | 亚洲精品午夜国产va久久成人 | 美女黄网站免费观看 | 娇妻被各种姿势c到高潮小说 | 日本欧美一区二区 | 一级在线观看视频 | 中文日韩欧美 | 国产精品hd免费观看 | 欧美一级特黄aaaaaaa什 | 精品在线视频观看 | 久久精品国产亚洲7777小说 | 成人国产精品齐天大性 | 久久久久久免费免费 | 国产呦在线观看视频 | 久久久久久久不卡 | 全黄裸片武则天一级第4季 偿还电影免费看 | 越南一级黄色片 | 国产一级在线观看视频 | 久久国语对白 | 性欧美日本 | 中文字幕在线观看精品 | 久久精品视频一区二区三区 | 日本在线播放一区 | 欧美视频在线一区二区三区 | 国产午夜亚洲精品午夜鲁丝片 | 久久新网址 | 日本一级黄色大片 | 免费h片|