urllib2是python的乙個獲取urls的元件。他以urlopen函式的形式提供了乙個非常簡單的介面,具有利用不同協議獲取urls的能力,同樣提供了乙個比較複雜的介面來處理一般情況。
urllib2可用來完成以下功能:
1.獲取web頁面
2.在遠端http伺服器上驗證
3.額外資料請求,如表單提交(get和post)
4.異常處理
5.非http協議通訊(如ftp)
1.獲取web頁面
例1:列印html頁面,下面是最簡單的形式
#!
/usr/bin/env python
import urllib2
response = urllib2.urlopen(
'')html = response.read(
)print html
例2:開啟指定頁面並列印
html
頁面和一些額外的資訊,採用了urllib2最一般的形式:i、
urllib2.request()的功能是構造乙個請求資訊,返回的req就是乙個構造好的請求。ii
、urllib2.urlopen()的功能是傳送剛剛構造好的請求req,並返回乙個檔案類
的物件response,包括了所有的返回資訊。iii
、通過response.read()可以讀取到response裡面的
html,
通過response.info()可以讀到一些額外的資訊。#!
/usr/bin/env python
import sys, urllib2
req = urllib2.request(sys.argv[1]
)response = urllib2.urlopen(req)
"retrieved"
, response.geturl(
)info = response.info(
)for key, value in info.items():
"%s = %s"
%(key, value)
html = response.read(
)print html
2.在遠端http伺服器上驗證
有些站點需要http認證後才能訪問。最普通的認證型別是基本認證,由客戶端向伺服器器傳送乙個使用者名稱和密碼。http認證一般顯示乙個彈出視窗來詢問使用者名稱和密碼,這與基於cookie和form的認證不同。
下面是乙個例子,首先定義了乙個擴充套件urllib2.httppasswordmgr的類,允許在需要的時候詢問使用者名稱和密碼,然後呼叫build_opener()指定一些額外處理,其實在urllib2.urlopen()內部呼叫了build_opener(),並且不帶任何引數。所以在訪問常規**的時候urllib2.urlopen()等於opener.open()返回都一樣。 #!
3.表單提交(get和post)
有兩種方法提交表單資料:get和post,取決於html文件中標籤裡面的引數
get例項: #!
/usr/bin/env python
import sys, urllib2, urllib
keyword = sys.argv[1]
url = url +
'?'+ urllib.urlencode(
'',[
('query'
, keyword)])
req = urllib2.request(url)
response = urllib2.urlopen(req)
print response.read()
post例項:
#!/usr/bin/env python
import sys, urllib2, urllib
keyword = sys.argv[1]
url =
''data = urllib.urlencode([(
'query'
, keyword)])
req = urllib2.request(url)
response = urllib2.urlopen(req, data)
更一般的提交資料,通過urllib2.request()構造乙個有額外資料的請求資訊。包括「http header」和想要傳送的資料,這些資料需要被以標準的方式encode,然後作為乙個資料引數傳送給request物件。encoding是在urllib中完成的,而不是在urllib2中完成的。
如下例:
#!/usr/bin/env python
import urllib, urllib2
url =
''user_agent =
'mozilla/4.0 (compatible; msie 5.5; windows nt)'
values =
headers =
data = urllib.urlencode(values)
req = urllib2.request(url, data, headers)
response = urllib2.urlopen(req)
the_page = response.read()
4.異常處理
捕獲連線錯誤,
在和遠端web伺服器建立連線時,很多地方可能出現問題:提供的url不對、url使用了乙個不支援的協議、主機名不存在、訪問不到伺服器或者伺服器針對請求返回乙個錯誤(例如:404)。
任何在連線過程中產生的異常要麼是urllib2.urlerror的例項,要麼是它的乙個子類。
#!/usr/bin/env python
import sys, urllib2
req = urllib2.request(sys.argv[1]
)try
:response = urllib2.urlopen(req)
except urllib2.urlerror, e:
"error retrieving data:"
, esys.exit(1)
print response.read()
5.非http協議通訊(如ftp)
urllib2模組也支援非http協議。預設情況下支援http、ftp、gopher和機器本地硬碟上的檔案,只是response.info()返回的報頭會有所差異。
python利用urlib2進行簡單爬蟲例項
coding utf 8 import urllib import urllib2 import re import thread import time 糗事百科爬蟲練習 糗事百科爬蟲類 class qsbk 初始化方法,定義一些變數 def init self self.pageindex 1 ...
總結urlib,正則相關內容
urllib2是用於獲取urls 統一資源定位符 的乙個python模組。它以urlopen函式的形式提供了非常簡單的介面。能夠使用各種不同的協議來獲取 它還提供乙個稍微複雜的介面用於處理常見的情況 如基本身份驗證 cookies proxies 等。這些是由handlers和openers物件提供...
uni app使用總結(2)
npm install 後報錯 1 sass loader 7.1.0 8.0.0或以上暫時有bug。dev at valuepath.foreach.funcpath 解決 tab methods裡的函式 1 原因 mescroll uni 在 1.1.5 版本在 up 中新增 isbounce ...