最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python爬蟲之urllib3的使用示例

 更新時(shí)間:2018年07月09日 13:41:01   作者:瀟瀟漓燃  
這篇文章主要介紹了 python爬蟲之urllib3的使用示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

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

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

一、get請求

urllib3主要使用連接池進(jìn)行網(wǎng)絡(luò)請求的訪問,所以訪問之前我們需要?jiǎng)?chuàng)建一個(gè)連接池對象,如下所示:

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())

經(jīng)查看源碼:

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

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

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

dir(r)

直截取了一部分

#'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請求

import urllib3
url = "http://httpbin.org"
fields = {
  'name':'xfy'
}
http = urllib3.PoolManager()
r = http.request('post',url+"/post",fields=fields)
print(r.data.decode())

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

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

三、設(shè)置headers

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())

四、設(shè)置代理

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())

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

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

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'))

六、上傳文件

#元組形式
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())

#二進(jìn)制形式

r = http.request('post','http://httpbin.org/post',body = data,headers={'Content-Type':'image/jpeg'})
print(r.data.decode())

七、超時(shí)設(shè)置

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

八、重試和重定向

import urllib3
http = urllib3.PoolManager()
#重試
r = http.request('post','http://httpbin.org/post',retries = 5) #請求重試測次數(shù)為5次 ,默認(rèn)為3ci
print(r.retries) #Retry(total=5, connect=None, read=None, redirect=0, status=None)
#關(guān)閉重試
http.request('post','http://httpbin.org/post',retries = False) #請求重試測次數(shù)為5次 ,默認(rèn)為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 本身設(shè)置了https的處理,但是有警告

雖然可以請求,但是報(bào)如下警告:

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)

禁用警告:

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

urllib3很強(qiáng)大,但是并沒有requests好用。了解為主。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 詳解python的數(shù)字類型變量與其方法

    詳解python的數(shù)字類型變量與其方法

    大家都知道數(shù)字?jǐn)?shù)據(jù)類型存儲數(shù)值,它們是不可變的數(shù)據(jù)類型,這意味著改變數(shù)據(jù)類型的結(jié)果值,需要一個(gè)新分配的對象。這篇文章給大家詳細(xì)介紹了python的數(shù)字類型變量以及其方法,文中介紹的很詳細(xì),相信對大家的理解和學(xué)習(xí)很有幫助,有需要的朋友們可以參考借鑒。
    2016-11-11
  • Python函數(shù)屬性和PyC詳解

    Python函數(shù)屬性和PyC詳解

    這篇文章主要介紹了Python函數(shù)屬性和PyC,分享了相關(guān)代碼示例,小編覺得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2021-10-10
  • 基于python實(shí)現(xiàn)對文件進(jìn)行切分行

    基于python實(shí)現(xiàn)對文件進(jìn)行切分行

    這篇文章主要介紹了基于python實(shí)現(xiàn)對文件進(jìn)行切分行,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • pycharm配置python 設(shè)置pip安裝源為豆瓣源

    pycharm配置python 設(shè)置pip安裝源為豆瓣源

    這篇文章主要介紹了pycharm配置python 設(shè)置pip安裝源為豆瓣源,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • Python入門教程(七)Python數(shù)字類型

    Python入門教程(七)Python數(shù)字類型

    這篇文章主要介紹了Python入門教程(七)Python數(shù)字類型,Python是一門非常強(qiáng)大好用的語言,也有著易上手的特性,本文為入門教程,需要的朋友可以參考下
    2023-04-04
  • Python實(shí)現(xiàn)的人工神經(jīng)網(wǎng)絡(luò)算法示例【基于反向傳播算法】

    Python實(shí)現(xiàn)的人工神經(jīng)網(wǎng)絡(luò)算法示例【基于反向傳播算法】

    這篇文章主要介紹了Python實(shí)現(xiàn)的人工神經(jīng)網(wǎng)絡(luò)算法,結(jié)合實(shí)例形式分析了Python基于反向傳播算法實(shí)現(xiàn)的人工神經(jīng)網(wǎng)絡(luò)相關(guān)操作技巧,需要的朋友可以參考下
    2017-11-11
  • python爬蟲將js轉(zhuǎn)化成json實(shí)現(xiàn)示例

    python爬蟲將js轉(zhuǎn)化成json實(shí)現(xiàn)示例

    這篇文章主要為大家介紹了python爬蟲將js轉(zhuǎn)化成json實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • FP-growth算法發(fā)現(xiàn)頻繁項(xiàng)集——發(fā)現(xiàn)頻繁項(xiàng)集

    FP-growth算法發(fā)現(xiàn)頻繁項(xiàng)集——發(fā)現(xiàn)頻繁項(xiàng)集

    常見的挖掘頻繁項(xiàng)集算法有兩類,一類是Apriori算法,另一類是FP-growth。Apriori通過不斷的構(gòu)造候選集、篩選候選集挖掘出頻繁項(xiàng)集,需要多次掃描原始數(shù)據(jù),當(dāng)原始數(shù)據(jù)較大時(shí),磁盤I/O次數(shù)太多,效率比較低下
    2021-06-06
  • django 將自帶的數(shù)據(jù)庫sqlite3改成mysql實(shí)例

    django 將自帶的數(shù)據(jù)庫sqlite3改成mysql實(shí)例

    這篇文章主要介紹了django 將自帶的數(shù)據(jù)庫sqlite3改成mysql實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • Python制作簡易計(jì)算器功能

    Python制作簡易計(jì)算器功能

    這篇文章主要為大家詳細(xì)介紹了Python制作簡易計(jì)算器功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-04-04

最新評論

长子县| 高陵县| 南康市| 宁波市| 南昌市| 临沭县| 五家渠市| 石渠县| 安乡县| 阿拉善盟| 翁牛特旗| 绥阳县| 红原县| 鹤岗市| 通州市| 平定县| 济源市| 通榆县| 平利县| 广西| 新化县| 抚宁县| 和龙市| 宝清县| 菏泽市| 夏邑县| 宜都市| 封丘县| 曲靖市| 兴隆县| 榆树市| 闽侯县| 宣化县| 贵德县| 聂拉木县| 芮城县| 鲁甸县| 呼图壁县| 师宗县| 彭山县| 巴彦淖尔市|