Python學習筆記五

Python urllib模組提供了一個從指定的URL地址獲取網頁數據,然後對其進行分析處理,獲取想要的數據。 1.查看urllib模組提供的urlopen函數。

help(urllib.urlopen)  urlopen(url, data=None, proxies=None)  Create a file-like object for the specified URL to read from.

創建一個類文件對象為指定的url來讀取。

參數url表示遠程數據的路徑,一般是http或者ftp路徑。 參數data表示以get或者post方式提交到url的數據。 參數proxies表示用於代理的設置。

Python通過urlopen函數來獲取html數據,下面通過函數getUrl()將百度首頁顯示到顯示器上面。

#encoding:utf-8  import urllib  def getUrl(url):      page = urllib.urlopen(url)      html = page.read()      print html  getUrl('http://www.baidu.com')

urlopen返回一個類文件對象,它提供了如下方法: 1)read() , readline() , readlines(),fileno()和close(): 這些方法的使用與文件對象完全一樣。 2)info():返回一個httplib.HTTPMessage 對象,表示遠程伺服器返回的頭資訊。 3)getcode():返回Http狀態碼,如果是http請求,200表示請求成功完成;404表示網址未找到。 4)geturl():返回請求的url地址。

urlopen方法實例:

#!/usr/bin/python  #encoding:utf-8  import urllib  baidu = urllib.urlopen('http://www.baidu.com')  print 'http header:n',baidu.info()  print 'http status:',baidu.getcode()  print 'url:',baidu.geturl()  for line in baidu:      print line,  baidu.close()  ########output########  #http header:  #http status: 200  #url: http://www.baidu.com  #baidu home page

2.查看urllibe模組提供的urlretrieve函數。

help(urllib.urlretrieve)  urlretrieve(url, filename=None, reporthook=None, data=None)

urlretrieve方法直接將遠程數據下載到本地。 參數finename指定了保存本地路徑(如果參數未指定,urllib會生成一個臨時文件保存數據。) 參數reporthook是一個回調函數,當連接上伺服器、以及相應的數據塊傳輸完畢時會觸發該回調,我們可以利用這個回調函數來顯示當前的下載進度。 參數data指post到伺服器的數據,該方法返回一個包含兩個元素的(filename, headers)元組,filename表示保存到本地的路徑,header表示伺服器的響應頭。 urlretrieve方法下載文件實例,可以顯示下載進度。

#!/usr/bin/python  #encoding:utf-8  import urllib  import os  def Schedule(a,b,c):      '''''      a:已經下載的數據塊      b:數據塊的大小      c:遠程文件的大小     '''      per = 100.0 * a * b / c      if per > 100 :          per = 100      print '%.2f%%' % per  url = 'http://www.python.org/ftp/python/2.7.5/Python-2.7.5.tar.bz2'  #local = url.split('/')[-1]  local = os.path.join('/data/software','Python-2.7.5.tar.bz2')  urllib.urlretrieve(url,local,Schedule)  ######output######  #0.00%  #0.07%  #0.13%  #0.20%  #....  #99.94%  #100.00%

通過上面的練習可以知道,urlopen可以輕鬆獲取遠端html頁面資訊,然後通過python正則對所需要的數據進行分析,匹配出想要用的數據,在利用urlretrieve將數據下載到本地。對於訪問受限或者對連接數有限制的遠程url地址可以採用proxies(代理的方式)連接,如果遠程數據量過大,單執行緒下載太慢的話可以採用多執行緒下載,這個就是傳說中的爬蟲。