Python學習筆記五
- 2020 年 1 月 9 日
- 筆記
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(代理的方式)連接,如果遠程數據量過大,單執行緒下載太慢的話可以採用多執行緒下載,這個就是傳說中的爬蟲。