1. 程式人生 > >python urllib2詳解及例項

python urllib2詳解及例項

urllib2是Python的一個獲取URLs(Uniform Resource Locators)的元件。他以urlopen函式的形式提供了一個非常簡單的介面,這是具有利用不同協議獲取URLs的能力,他同樣提供了一個比較複雜的介面來處理一般情況,例如:基礎驗證,cookies,代理和其他。它們通過handlers和openers的物件提供。

urllib2支援獲取不同格式的URLs(在URL的":"前定義的字串,例如:"ftp"是"ftp:python.ort/"的字首),它們利用它們相關網路協議(例如FTP,HTTP)進行獲取。這篇教程關注最廣泛的應用--HTTP。

對於簡單的應用,urlopen是非常容易使用的。但當你在開啟HTTP的URLs時遇到錯誤或異常,你將需要一些超文字傳輸協議(HTTP)的理解。

最權威的HTTP文件當然是RFC 2616(http://rfc.net/rfc2616.html)。這是一個技術文件,所以並不易於閱讀。這篇HOWTO教程的目的是展現如何使用urllib2,

並提供足夠的HTTP細節來幫助你理解。他並不是urllib2的文件說明,而是起一個輔助作用。

獲取 URLs

最簡單的使用urllib2

程式碼例項:

1 2 3 import urllib2  response = urllib2.urlopen('http://python.org/' html = response.read()

urllib2的很多應用就是那麼簡單(記住,除了"http:",URL同樣可以使用"ftp:","file:"等等來替代)。但這篇文章是教授HTTP的更復雜的應用。

HTTP是基於請求和應答機制的--客戶端提出請求,服務端提供應答。urllib2用一個Request物件來對映你提出的HTTP請求,在它最簡單的使用形式中你將用你要請求的地址建立一個Request物件,通過呼叫urlopen並傳入Request物件,將返回一個相關請求response物件,這個應答物件如同一個檔案物件,所以你可以在Response中呼叫.read()。

1 2 3 4 import urllib2  req = urllib2.Request('http://www.pythontab.com' response = urllib2.urlopen(req)  the_page = response.read()

記得urllib2使用相同的介面處理所有的URL頭。例如你可以像下面那樣建立一個ftp請求。

req = urllib2.Request('ftp://example.com/')

在HTTP請求時,允許你做額外的兩件事。首先是你能夠傳送data表單資料,其次你能夠傳送額外的關於資料或傳送本身的資訊("metadata")到伺服器,此資料作為HTTP的"headers"來發送。

接下來讓我們看看這些如何傳送的吧。

Data資料

有時候你希望傳送一些資料到URL(通常URL與CGI[通用閘道器介面]指令碼,或其他WEB應用程式掛接)。在HTTP中,這個經常使用熟知的POST請求傳送。這個通常在你提交一個HTML表單時由你的瀏覽器來做。

並不是所有的POSTs都來源於表單,你能夠使用POST提交任意的資料到你自己的程式。一般的HTML表單,data需要編碼成標準形式。然後做為data引數傳到Request物件。編碼工作使用urllib的函式而非urllib2。

程式碼例項:

1 2 3 4 5 6 7 8 9 10 import urllib  import urllib2  url = 'http://www.pythontab.com'  values = {'name' 'Michael Foord' 'location' 'pythontab' 'language' 'Python'  data = urllib.urlencode(values)  req = urllib2.Request(url, data)  response = urllib2.urlopen(req)  the_page = response.read()

記住有時需要別的編碼(例如從HTML上傳檔案--看http://www.w3.org/TR/REC-html40/interact/forms.html#h-17.13 HTML Specification, Form Submission的詳細說明)。

如ugoni沒有傳送data引數,urllib2使用GET方式的請求。GET和POST請求的不同之處是POST請求通常有"副作用",它們會由於某種途徑改變系統狀態(例如提交成堆垃圾到你的門口)。

儘管HTTP標準說的很清楚POSTs通常會產生副作用,GET請求不會產生副作用,但沒有什麼可以阻止GET請求產生副作用,同樣POST請求也可能不產生副作用。Data同樣可以通過在Get請求的URL本身上面編碼來傳送。

程式碼例項:

1

相關推薦

python urllib2例項

urllib2是Python的一個獲取URLs(Uniform Resource Locators)的元件。他以urlopen函式的形式提供了一個非常簡單的介面,這是具有利用不同協議獲取URLs的能力,他同樣提供了一個比較複雜的介面來處理一般情況,例如:基礎驗證,

python 中join()函式strip() 函式和 split() 函式的例項

1、join()函式 Python中有join()和os.path.join()兩個函式,具體作用如下: join(): 連線字串陣列。將字串、元組、列表中的元素以指定的字元(分隔符)連線生成一個新的字串 語法: ‘sep’.join(seq) 引數說明 sep:分隔符。可以

python strip() 函式和 split() 函式的例項

一直以來都分不清楚strip和split的功能,實際上strip是刪除的意思;而split則是分割的意思。因此也表示了這兩個功能是完全不一樣的,strip可以刪除字串的某些字元,而split則是根據規定的字元將字串進行分割。下面就詳細說一下這兩個功能, 1 Python strip()函式 介紹

Java執行緒池例項

前言 多執行緒的非同步執行方式,雖然能夠最大限度發揮多核計算機的計算能力,但是如果不加控制,反而會對系統造成負擔。執行緒本身也要佔用記憶體空間,大量的執行緒會佔用記憶體資源並且可能會導致Out of Memory。即便沒有這樣的情況,大量的執行緒回收也會給GC帶來很大的壓力

Linux下的壓縮zip,tar命令例項

Linux下的壓縮解壓縮命令詳解及例項 例項:壓縮伺服器上當前目錄的內容為xxx.zip檔案 zip -r xxx.zip ./* 解壓zip檔案到當前目錄 unzip filename.zip ============================ 另:有些伺服器

微信 小程式前端原始碼例項分析

微信小程式前端原始碼邏輯和工作流 看完微信小程式的前端程式碼真的讓我熱血沸騰啊,程式碼邏輯和設計一目瞭然,沒有多餘的東西,真的是大道至簡。 廢話不多說,直接分析前端程式碼。個人觀點,難免有疏漏,僅供參考。 檔案基本結構: 先看入口app.js,app(obj)註冊一個小程式。接受一個 obje

execCommand()命令例項展示

execCommand方法是執行一個對當前文件,當前選擇或者給出範圍的命令。處理Html資料時常用如下格式: document.execCommand(sCommand[,互動方式, 動態引數]) , 其中:sCommand為指令引數(

[jQuery]$.ajax()方法例項

$.ajax()方法詳解及例項  1.url: 要求為String型別的引數,(預設為當前頁地址)傳送請求的地址。2.type:要求為String型別的引數,請求方式(post或get)預設為get。注意其他http請求方法,例如put和delete也可以使用,但僅部分瀏覽

Angular自定義指令之compile, link, controller屬性例項演示

本文章主要就angularjs指令中的compile,link及controller函式的使用和區別進行詳細討論。以下是本文的結構: directive的執行原理 compile用法 link 用法 controller 用法 compile,link及co

ER圖例項解析

ER圖分為實體、屬性、關係三個核心部分。 實體是長方形,屬性是橢圓形,關係為菱形。 實體(entity): 即資料模型中的資料物件(即資料表),用長方體來表示,每個實體都有自己的實體成員(entity member)或者說實體物件(entity instance),例如

Linux下的壓縮zip,壓縮unzip命令例項

Linux下的壓縮解壓縮命令詳解及例項 例項:壓縮伺服器上當前目錄的內容為xxx.zip檔案 zip -r xxx.zip ./* 解壓zip檔案到當前目錄 unzip filename.zip ============================ 另:有些伺服器沒有安裝zip包執行不了zip

跟我學Redis(17)—Redis事務例項

前面有篇文章,簡單介紹了Redis事務。 Redis事務主要命令包括 MULTI、EXEC、WATCH 命令。本篇文章將詳細介紹事務以及Redis事務例項應用! 一、事務、悲觀鎖、樂觀鎖概述 簡單的

ftp客戶端命令例項

        經常使用ftp進行檔案上下傳的使用者使用的工具大部分都是flashxp或者java開源實現的FileZilla Client(當然也有java開源的FileZilla Server )客戶端軟體實現,可是大部分人並不知道windiows和linux一般都帶的

ndk開發中的Android.mk檔案與Application.mk例項

Android.mk檔案的作用: An Android.mk file is written to describe your sources to the build system. 中文意思是:寫一個Android.mk檔案是為了向生成系統描述你的原始碼。

Java 執行緒池例項程式碼

這篇文章主要介紹了Java 執行緒池的相關資料,並符例項程式碼,幫助大家學習參考,需要的朋友可以參考下執行緒池的技術背景在面向物件程式設計中,建立和銷燬物件是很費時間的,因為建立一個物件要獲取記憶體資源或者其它更多資源。在Java中更是如此,虛擬機器將試圖跟蹤每一個物件,以便

Angular自定義指令之scope屬性例項演示

本文將對AngularJS自定義指令詳解中的scope屬性配合例項演示,進行深度講解: scope屬性值可以是Boolean型別, 也可以是 Object型別, Boolean型別: scope值為false時,可以理解成指令內部並沒有一個新的sco

CvMat的用法例項

目錄     CvMat是OpenCV比較基礎的函式。初學者應該掌握並熟練應用。但是我認為計算機專業學習的方法是,不斷的總結並且提煉,同時還要做大量的實踐,如編碼,才能記憶深刻,體會深刻,從而引導自己想更高層次邁進。 1.初始化矩陣: 方式一、逐點賦值式:

popen和pclose例項

popen函式是標準c提供的一個管道建立函式,其內部操作主 要是建立一個管道,呼叫fork建立子程序,關閉不需用的檔案描述符,呼叫exec函式族執行popen的第一個引數。然後等到關閉。 也就是說我們可以傳遞一個命令(ls -l......)或一個可執行

Python第二天: 變量變量賦值

number ont 時間 目錄 命令 code toc 編號 運用 目錄 [toc] 此文章針對剛學Python的小白,若覺得對變量有很好的掌握,可以觀看其他的文章在這裏, 我說一下我對變量的簡單總結: 變量是為了存儲運算程序中的一些中間結果, 為了方便日後調用 什麽

python爬蟲學習筆記二:Requests庫HTTP協議

Requests庫的安裝:https://mp.csdn.net/postedit/83715574 r=requests.get(url,params=None,**kwargs) 這個r是Response物件 url :擬獲取頁面的url連結 params:url中的額外引數