国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

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

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

服務器之家 - 腳本之家 - Python - Python中的urllib模塊使用詳解

Python中的urllib模塊使用詳解

2020-07-19 11:00腳本之家 Python

這篇文章主要介紹了Python中的urllib模塊使用詳解,是Python入門學習中的基礎知識,需要的朋友可以參考下

urllib模塊提供的上層接口,使我們可以像讀取本地文件一樣讀取www和ftp上的數據。每當使用這個模塊的時候,老是會想起公司產品的客戶端,同事用C++下載Web上的圖片,那種“痛苦”的表情。我以前翻譯過libcurl教程,這是在C/C++環境下比較方便實用的網絡操作庫,相比起libcurl,Python的urllib模塊的使用門檻則低多了。可能有些人又會用效率來批評Python,其實在操作網絡,或者在集群交互的時候, 語言的執行效率絕不是瓶頸。這種情況下,一個比較好的方法是,將python嵌入到C/C++中,讓Python來完成一些不是核心的邏輯處理。又扯遠了,廢話少說,開始urllib之旅吧~~ (前幾天我用這個模塊寫了個蜘蛛,感興趣的同學可以在以前的博客中找到代碼)

先看一個例子,這個例子把Google首頁的html抓取下來并顯示在控制臺上:

?
1
2
3
4
5
# 別驚訝,整個程序確實只用了兩行代碼
import urllib
print urllib.urlopen('http://www.google.com').read()
 
urllib.urlopen(url[, data[, proxies]]) :

創建一個表示遠程url的類文件對象,然后像本地文件一樣操作這個類文件對象來獲取遠程數據。參數url表示遠程數據的路徑,一般是網址;參數data表示以post方式提交到url的數據(玩過web的人應該知道提交數據的兩種方式:post與get。如果你不清楚,也不必太在意,一般情況下很少用到這個參數);參數proxies用于設置代理(這里不詳細講怎么使用代理,感興趣的看客可以去翻閱Python手冊urllib模塊)。urlopen返回 一個類文件對象,他提供了如下方法:

  •         read() , readline() , readlines() , fileno() , close() :這些方法的使用方式與文件對象完全一樣;
  •         info():返回一個httplib.HTTPMessage 對象,表示遠程服務器返回的頭信息;
  •         getcode():返回Http狀態碼。如果是http請求,200表示請求成功完成;404表示網址未找到;
  •         geturl():返回請求的url;

下面來擴充一下上面的例子,看官可以運行一下這個例子,加深對urllib的印象:

?
1
2
3
4
5
6
7
8
9
google = urllib.urlopen('http://www.google.com')
print 'http header:/n', google.info()
print 'http status:', google.getcode()
print 'url:', google.geturl()
for line in google: # 就像在操作本地文件
  print line,
google.close()
 
urllib.urlretrieve(url[, filename[, reporthook[, data]]]):

urlretrieve方法直接將遠程數據下載到本地。參數filename指定了保存到本地的路徑(如果未指定該參數,urllib會生成一個臨時文件來保存數據);參數reporthook是一個回調函數,當連接上服務器、以及相應的數據塊傳輸完畢的時候會觸發該回調。我們可以利用這個回調函 數來顯示當前的下載進度,下面的例子會展示。參數data指post到服務器的數據。該方法返回一個包含兩個元素的元組(filename, headers),filename表示保存到本地的路徑,header表示服務器的響應頭。下面通過例子來演示一下這個方法的使用,這個例子將新浪首頁的html抓取到本地,保存在D:/sina.html文件中,同時顯示下載的進度。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
def cbk(a, b, c):
  '''回調函數
  @a: 已經下載的數據塊
  @b: 數據塊的大小
  @c: 遠程文件的大小
  '''
  per = 100.0 * a * b / c
  if per > 100:
    per = 100
  print '%.2f%%' % per
 
url = 'http://www.sina.com.cn'
local = 'd://sina.html'
urllib.urlretrieve(url, local, cbk)

上面介紹的兩個方法是urllib中最常用的方法,這些方法在獲取遠程數據的時候,內部會使用URLopener或者 FancyURLOpener類。作為urllib的使用者,我們很少會用到這兩個類,這里我不想多講。如果對urllib的實現感興趣, 或者希望urllib支持更多的協議,可以研究這兩個類。在Python手冊中,urllib的作者還列出了這個模塊的缺陷和不足,感興趣的同學可以打開 Python手冊了解一下。

urllib中還提供了一些輔助方法,用于對url進行編碼、解碼。url中是不能出現一些特殊的符號的,有些符號有特殊的用途。我們知道以get方式提交數據的時候,會在url中添加key=value這樣的字符串,所以在value中是不允許有'=',因此要對其進行編碼;與此同時服務器接收到這些參數的時候,要進行解碼,還原成原始的數據。這個時候,這些輔助方法會很有用:

  •     urllib.quote(string[, safe]):對字符串進行編碼。參數safe指定了不需要編碼的字符;
  •     urllib.unquote(string) :對字符串進行解碼;
  •     urllib.quote_plus(string [ , safe ] ) :與urllib.quote類似,但這個方法用'+'來替換' ‘,而quote用'%20′來代替' ‘
  •     urllib.unquote_plus(string ) :對字符串進行解碼;
  •     urllib.urlencode(query[, doseq]):將dict或者包含兩個元素的元組列表轉換成url參數。例如 字典{‘name': ‘dark-bull', ‘age': 200}將被轉換為”name=dark-bull&age=200″
  •     urllib.pathname2url(path):將本地路徑轉換成url路徑;

    urllib.url2pathname(path):將url路徑轉換成本地路徑;

用一個例子來體驗一下這些方法吧~~:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
data = 'name = ~a+3'
 
data1 = urllib.quote(data)
print data1 # result: name%20%3D%20%7Ea%2B3
print urllib.unquote(data1) # result: name = ~a+3
 
data2 = urllib.quote_plus(data)
print data2 # result: name+%3D+%7Ea%2B3
print urllib.unquote_plus(data2)  # result: name = ~a+3
 
data3 = urllib.urlencode({ 'name': 'dark-bull', 'age': 200 })
print data3 # result: age=200&name=dark-bull
 
data4 = urllib.pathname2url(r'd:/a/b/c/23.php')
print data4 # result: ///D|/a/b/c/23.php
print urllib.url2pathname(data4)  # result: D:/a/b/c/23.php

urllib模塊的基本使用,就這么簡單。oh~~yeah~~又一個模塊寫完了,想想,我已經寫了將近30個模塊了,有時間我要好好整理一下@@@@

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 在线中文 | 中文字幕第一区 | 日本一区二区在线播放 | 久久国产精品久久久久久电车 | 国产成人精品一区二区三区四区 | 久久久久久久国产精品免费播放 | 在线免费黄色 | 成人精品免费视频 | 欧美视频免费 | www.91福利 | 亚洲一区在线日韩在线深爱 | 国产日产精品一区二区三区四区 | 久久久久久久久一区二区三区 | 久久综合av | 色视频免费在线观看 | 久久高清 | 免费在线观看黄色av | 欧美成人精品一区二区三区 | 国产精品视频免费 | 欧美日韩国产在线播放 | 亚洲精品国产一区 | 亚洲欧美激情精品一区二区 | 99在线免费视频 | 午夜私人影院 | 美女久久久久 | 一区二区三区四区在线 | 欧美二三区 | 亚洲国产精品久久久久秋霞不卡 | 免费在线观看黄色 | 欧美国产精品一区二区 | 欧美精品在线观看 | 亚洲国产精品一区 | 欧美永久精品 | 无毛av| 国产成人精品一区二区三区四区 | 一a级毛片 | 久久a毛片 | 国产成人自拍视频在线观看 | 亚洲国产精品99久久久久久久久 | 国产目拍亚洲精品99久久精品 | 日韩视频一区二区三区 |