1. 程式人生 > >Python模組學習————2、urllib、urllib2學習

Python模組學習————2、urllib、urllib2學習

什麼是urllib

urllib是python提供的一個用於操作URL的模組,在python2.x中有URllib庫,也有Urllib2庫,在python3.x中Urllib2合併到了Urllib中,我們爬取網頁的時候需要經常使用到這個庫。

升級合併之後,模組中包的位置變化的地方比較多。在此,我們總結併為大家列舉一些常見的位置變動,方便之前用python2.x的朋友在使用python3.x的時候可以快速的掌握,其他的在用到的時候再具體為大家講解。

常見的變化有:

python2.x中使用import urllib2——————對應的,在python3.x中會使用import urllib.request,urllib.error。

在python2.x中使用import urllib——————對應的,在python3.x中會使用import urlli.request,urllib.error

在python2.x中使用import urlparse—————對應的,在python3.x中會使用import urllib.parse

在python2.x中使用import urllib2——————對應的,在python3.x中會使用import urllib.request,urllib.error

在python2.x中使用urllib2.urlopen——————對應的,在python3.x中會使用import urllib.request.urlopen

在python2.x中使用urllib.quote——————對應的,在python3.x中會使用import urllib.request.quote

在python2.x中使用cookielib.CoolieJar——————對應的,在python3.x中會使用Http.CookieJar

在python2.x中使用urllib2.Request————對應的,在python3.x中會使用urllib.request.Request。

以上是對urllib相關模組中從python2.x到python3.x的常見的一些變動,如果之前使用的是python2.x版本或者在網上閱讀關於python2.x的程式碼,可以根據以上對應關係寫出python3.x程式

urllib與urllib2函式庫使用說明

(1)def urlopen(url,data=None,proxies=None)

引數說明:

url:需要開啟的網址(必須符合URL規範)

data:向指定的URL傳送的資料字串,Get或者POST都可以,但是必須符合標準格式,格式為:

         key1=value1&key2=value2.................

proxies:代理伺服器地址字典,如果未指定,在window平臺上則根據IE的設定不支援需要驗證的代理伺服器。

返回值說明:urlopen返回一個類檔案物件,該類檔案有如下方法:

read(),readline(),readlines(),fileno(),close():這些方法的使用方式與檔案物件完全一樣;

info():返回一個httplib.HTTPMessage物件,表示遠端伺服器返回的訊息;

getcode():返回HTTP狀態碼。如果是HTTP請求,200表示請求成功完成,404表示資源不存在或未找到。

程式碼例項:

#encoding:utf-8
import urllib
baidu=urllib.urlopen('http://www.baidu.com')
print "http header:\n",baidu.info()
print 'http status:\n',baidu.getcode()
print 'url:\n',baidu.geturl()
for i in baidu:
    print(i)
baidu.close()

執行結果:


(2)def urlretrieve(url, filename=None, reporthook=None, data=None)

引數說明:

url:符合URL規範的字串

filename:本地檔案路徑的字串,從URL返回的資料將儲存在該檔案中,如果設定為None則生成一個臨時檔案。

reporthook:一個函式引用,當連線上伺服器、以及相應的資料庫傳輸完畢的時候會觸發該函式,我們可以利用這個函式來顯示當前的下載進度等等。我們可以任意定義該函式的行為,只需要保證函式有三個引數:

                         第一個引數:為目前為止傳遞的資料塊數量

                         第二個引數:為每個資料塊的大小,單位為byte

                         第三個引數:為檔案總的大小(某些時候可能為-1)                 

data:向指定的URL傳送的資料字串,Get和Post都可以,但是必須符合標準格式:

                        key1=value1&key2=value2..........

函式返回值:返回一個元組(filename,headers),filename為引數總的filename,header為從伺服器傳回來的MIME的型別。

例項:

#encoding:utf-8
import urllib
def do(a,b,c):
    """回撥函式
    @a: 已經下載的資料塊
    @b: 資料塊的大小
    @c: 遠端檔案的大小
    """
    per = 100.0 * a * b / c    
    if per > 100:    
        per = 100    
    print '%.2f%%' % per
url='http://www.baidu.com'
local="I:\python\StoreData\hello.html"
urllib.urlretrieve(url,local,do)

執行結果顯示:


(3)其他函式

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路徑轉換成本地路徑;

import urllib
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、urllib2程式碼實戰測試

(1)簡單讀取網頁資訊

#coding:utf-8
import  urllib
response=urllib.urlopen('http://www.baidu.com')
print response.read()

執行結果:


相關推薦

Python模組學習————2urlliburllib2學習

什麼是urlliburllib是python提供的一個用於操作URL的模組,在python2.x中有URllib庫,也有Urllib2庫,在python3.x中Urllib2合併到了Urllib中,我們爬取網頁的時候需要經常使用到這個庫。升級合併之後,模組中包的位置變化的地方

Learning-Python【19】:Python常用模組2)—— ossysshutil

os模組:與作業系統相關的模組 import os # 獲取當前的工作目錄 print(os.getcwd()) # 切換工作目錄 os.chdir(r'E:\Python\test') print(os.getcwd()) # 當前目錄, 一個點 print(o

python的httpliburlliburllib2的區別及用

慢慢的把它們總結一下,總結就是最好的學習方法 宗述 首先來看一下他們的區別 urllib和urllib2 urllib 和urllib2都是接受URL請求的相關模組,但是urllib2可以接受一個Re

Python自動化開發-day01-Python開發基礎2-元組字典文件操作

文件 list pri 循環 pop 修改 寫入 replace pda 學習內容: 1. 元組操作 2. 字典操作 3. 文件操作 4. 深淺copy 1. 元組操作: 元組和列表非常相似,只不過元組不能在原處修改(它是不可變的),並且通常寫成圓括號中的一系列項。

OpenCV學習2:載入顯示修改儲存影象

載入影象(用cv::imread) imread功能是載入影象檔案成為一個Mat物件,其中第一個引數表示影象檔名稱 第二個引數,表示載入的影象是什麼型別,支援常見的三個引數值 IMREAD_UNCHANGED (<0) 表示載入原圖,不做任何改變

TensorFlow學習(2)——線性迴歸訓練和損失

線性迴歸 很多數學不是太好的同學一聽到線性迴歸這麼高階的名詞往往望而卻步,很多東西只要深入學習並沒有看起來那麼可怕。 那麼何為線性迴歸呢?其實就是我們初中學到的直線方程,還記得不?記不起來也不要緊,瞄一眼下圖你必能喚回當年那痛苦的記憶!哈哈 沒想到吧,當年最討

Python3學習(2)——指令碼編譯註解運算子

指令碼編譯 我們剛安裝完Python的時候執行程式碼都是通過命令列執行的,這樣子非常麻煩,所以我們要把程式碼寫在檔案中,這樣執行起來就非常方便了(方法適用Windows平臺): 首先把程式碼print

Python學習筆記:import sys模組(argvpathplatformexit)

  sys模組是Python標準庫中自帶的一個模組。   sys模組包括了一組非常實用的服務,內含很多函式方法和變數,用來處理Python執行時配置以及資源,從而可以與當前程式之外的系統環境互動,如:Python直譯器。   一、匯入sys模組 import sys #匯入sys模組 dir(sy

python學習的第21天模組之picklejsonxmlshelveconfigparser

一、pickle  *** 1、作用;專門用於python語言的序列化 PS;(1)什麼是序列化?                指的是將記憶體中的資料結構轉化為一種中間格式,並存儲到硬碟上   &nb

python學習筆記:sysos模組

  os模組:負責程式與作業系統的互動,提供了訪問作業系統底層的介面; sys模組:負責程式與python直譯器的互動,提供了一系列的函式和變數,用於操控python的執行時環境。     --os 常用方法-- os.remove(‘path/filename’)

python學習(十三)——模組timerandomossysjsonre

一、概念 模組 1、三種類型: (1)python標準庫 (2)第三方模組 (3)自定義模組 2、匯入 (1)import:         1)執行;2)呼叫 (2)from __ import * (不推薦) (3)執行對應檔案          

python學習(十六)——多型封裝反射動態匯入模組類內建attr方法

一、多型 # 不同的例項呼叫同樣的方法,產生不同的結果 # 多型來自繼承 class H2O: def __init__(self,name,temperature): self.name=name self.temperature=

Python 語言學習 第八篇:函式2(引數lamdba和函式屬性)

函式的引數是引數暴露給外部的介面,向函式傳遞引數,可以控制函式的流程,函式可以0個、1個或多個引數;在Python中向函式傳參,使用的是賦值方式。 一,傳遞引數 引數是通過賦值來傳遞的,傳遞引數的特點是: 引數的傳遞是通過自動把物件賦值給函式的本地變數名來實現的, 在函式內部的變數名的賦值不會

Py之urllib2Python庫之urlliburllib2urllib3系列簡介安裝使用方法之詳細攻略

urllib2簡介urllib和urllib2之間PK1、在python中,urllib和urllib2不可相互替代的。 整體來說,urllib2是urllib的增強,但是urllib中有urllib2中所沒有的函式。      urllib2可以用urllib2.openu

python學習筆記:sysrandom模組模組相關知識

#sys模組中常用的屬性 1、version:python版本 2、version_info:返回描述python版本的元組,可以直接用於判斷python版本 3、platform:作業系統版本     win10 64位下,返回字串"win32" 4、path:p

Python3.5.2 document學習系列之02The Python Standard Library(python 標準庫)——介紹

1.介紹Python庫包含幾種不同種類的組成部分。它包含通常被認為是一種語言“核心”部分的資料型別,如數字和列表。對這些型別來說,Python語言核心定義了書寫上的格式和位置以及一些語義上的約束,但沒有完全定義語法(另一方面,語言核心定義了語法特性像拼寫和操作優先順序)這個庫

python的簡單學習簡單使用模組列表元組字典序列引用

python模組簡單學習import sysimport sys #利用import語句輸入sys模組,sys模組包含了與python直譯器和它的環境有關的函式 print ('The command line arguments are:') for i in sys.a

python學習十二(自己製作模組並安裝到系統靜態方法)

第一:自己製作模組並安裝到系統 1、建立檔案setup.py,並對這個檔案新增內容: from distutils.core import setup setup(name="xxx",version="1.0",description="xxx",author="xxx"

Python學習筆記(2)位元操作檔案操作

位元操作注意一: 適用範圍 Note that you can only do bitwise operations on an integer. Trying to do them on strings or floats will result in nonsensi