Matlab 爬蟲 Web Scraping with Matlab 01--認識基本函數webread

來源:互聯網
上載者:User

標籤:char   響應   而不是   對象   lis   構建   rms   資訊   developer   

註:以下內容部分來自於mathworkswebread

 

從 RESTful Web 服務讀取內容

 

1.RESTful

REST 表示具象狀態傳輸 (representational state transfer),Web 服務的一種常用體繫結構樣式。RESTful 介面提供標準的 HTTP 方法,例如 GET、PUT、POST 或 DELETE。

隨著 REST 成為大多數 Web 和 Mobile 應用的預設選擇,勢必要對它的基本原理有所瞭解。

在它提出十多年後的今天,REST 已經成為最重要的 Web 應用程式技術之一。隨著所有技術朝著 API 方向發展,它的重要性有可能持續快速地增長。每門主要程式設計語言現在已經包含構建 RESTful Web 服務的架構。同樣地,Web 開發人員和架構師對 REST 和 RESTful 服務有一個清晰的理解是很重要的。這篇教程解釋了 REST 架構,然後研究使用它構建通用地基於API的任務的細節。

1.1  什麼是 REST

REST 代表具象狀態傳輸(representational state transfer),它是一種網路化超媒體應用的架構風格。它主要是用於構建輕量級的、可維護的、可伸縮的 Web 服務。基於 REST 的服務被稱為 RESTful 服務。REST 不依賴於任何協議,但是幾乎每個 RESTful 服務使用 HTTP 作為底層協議。

RESTful 使用HTTP post(建立、更新)資料、讀取資料、刪除資料。使用HTTP實現CRUD(建立、讀取、更新、刪除)操作。

1.2  RESTful 服務特點:

每個系統都使用資源。這些資源可以是圖片,視頻檔案,網頁,商業資訊,或者在基於電腦的系統中可以被代表的任何事物。服務的目的是提供一個視窗給用戶端以便用戶端能訪問這些資源。服務架構師和開發人員想要這些服務變得易於實現、維護、擴充、伸縮。RESTful 架構允許這些,甚至更多。一般來說,RESTful 服務應該有下面的屬性和特徵,也就是我要詳細描述的內容:

  • 模型表示(Representations)
  • 訊息(Messages)
  • URIs
  • 一致介面(Uniform interface)
  • (無狀態)Stateless
  • 資源之間的連結(Links between resources)
  • 緩衝(Caching)
 2.文法 data = webread(url) data = webread(url,QueryName1,QueryValue1,...,QueryNameN,QueryValueN) data = webread(___,options) [data,colormap,alpha] = webread(___) [data,Fs] = webread(___) 3.說明

樣本

data = webread(url) 從 url 指定的 Web 服務讀取內容並在 data 中返回內容。

Web 服務提供了一個RESTful,後者可以返回具有 Internet 媒體類型格式(例如 JSON、XML、映像或文本)的資料。

樣本

data = webread(url,QueryName1,QueryValue1,...,QueryNameN,QueryValueN) 按照一個或多個名稱-值對組參數指定的方式將查詢參數追加到 url。要將查詢放入訊息主體,請使用 webwrite。Web 服務定義查詢參數。

樣本

data = webread(___,options) 添加由 weboptions 對象 options 指定的其他 HTTP 要求選項。您可以將此文法與前面文法中的任何輸入參數結合使用。

要將資料返回為特定輸出類型,請指定 options 的 ContentType 屬性。

要使用函數讀取內容,請將 options 的 ContentReader 屬性指定為該函數的控制代碼。webread 從 Web 服務下載資料並使用指定的函數讀取這些資料:

  • 如果指定了一個返回多個輸出參數的函數控制代碼,則 webread 將返回所有輸出參數。

  • 如果指定了一個不返回任何輸出參數的函數控制代碼(例如視頻檔案的 Image Processing Toolbox? 函數 @implay),則 webread 將不返回任何輸出參數。

 

[data,colormap,alpha] = webread(___) 從 url 指定的 Web 服務中讀取映像,並在 data 中返回該映像。您可以使用上述文法僅返回映像。使用此文法可返回與該映像關聯的顏色圖和 Alpha 色板。

如果 HTTP 響應具有用於指定映像媒體類型的 Content-Type 頭欄位且 imread 支援該映像格式,則 webread 將返回一個映像。有關受支援的映像格式,請參閱支援的匯入和匯出檔案格式。

[data,Fs] = webread(___) 從 url 指定的 Web 服務中讀取音頻資料,並在 data 中返回這些資料。您可以使用上述文法僅返迴音頻資料。使用此文法可返迴音頻資料的採樣率(以赫茲為單位)。

如果 HTTP 響應具有用於指定音頻媒體類型的 Content-Type 頭欄位且 audioread 支援該音頻格式,則 webread 將返迴音頻資料。有關受支援的音頻格式,請參閱支援的匯入和匯出檔案格式。

 4.樣本4.1從網站讀取映像

從 Hubble Heritage 網站讀取木星映像並顯示該映像。

url = ‘http://heritage.stsci.edu/2007/14/images/p0714aa.jpg‘;rgb = webread(url);whos rgb
  Name         Size                 Bytes  Class    Attributes  rgb       1000x800x3            2400000  uint8              

調整並顯示映像。

rgb = imresize(rgb,0.6);imshow(rgb)

木星映像來源:NASA、ESA 和 Hubble Heritage Team (STScI/AURA)。(有關使用規定,請參閱 Hubble Heritage Information Center。)

4.2從 Web 服務 API 讀取資料

從世界銀行氣候資料 API 讀取美國的溫度資料。繪製 1901–2012 年的溫度圖。

從世界銀行讀取資料。此 API 返回 JSON 對象形式的資料。

api = ‘http://climatedataapi.worldbank.org/climateweb/rest/v1/‘;url = [api ‘country/cru/tas/year/USA‘];S = webread(url)
S = 112x1 struct array with fields:    year    data

webread 將 JSON 對象轉換為結構體數組。每個結構體都包含年份和美國該年的平均溫度(以攝氏度為單位)。

顯示第一年的溫度。

S(1)
ans =     year: 1901    data: 6.6187

繪製平均溫度圖。將 S.year 和 S.data 串聯成數組並繪製這些數組。

year = [S.year];data = [S.data];plot(year,data)xlabel(‘Year‘);ylabel(‘Temperature (Celsius)‘);title(‘USA Average Temperatures‘)axis tight

世界銀行提供的 API 和資料:氣候資料 API。(請參閱世界銀行:氣候資料 API 以瞭解有關 API 的更多資訊;請參閱世界銀行:使用規定。)

4.3指定 Web 服務查詢參數

在 File Exchange 中搜尋在過去七天中上傳的包含單詞 Simulink? 的檔案。

指定查詢參數。webread 將 Web 服務查詢參數名稱和值追加到 URL。File Exchange Web 服務定義 term 和 duration 查詢參數,而非 webread 函數。

url = ‘http://www.mathworks.com/matlabcentral/fileexchange/‘;data = webread(url,‘term‘,‘simulink‘,‘duration‘,7);

webread 以字元數組形式返回搜尋結果頁的 HTML。

4.4指定請求選項

指定一個附加請求選項以通過世界銀行氣候資料 API 將資料讀取到字元數組。

建立一個 weboptions 對象並將其 ContentType 設定為 ‘text‘webread 函數將 JSON 對象轉換為字元數組而不是結構體數組。顯示字元數組的開頭。

api = ‘http://climatedataapi.worldbank.org/climateweb/rest/v1/‘;url = [api ‘country/cru/tas/year/USA‘];options = weboptions(‘ContentType‘,‘text‘);data = webread(url,options);data(1:62)
ans =[{"year":1901,"data":6.6187487},{"year":1902,"data":6.4643273}

世界銀行提供的 API 和資料:氣候資料 API。(請參閱世界銀行:氣候資料 API 以瞭解有關 API 的更多資訊;請參閱世界銀行:使用規定。)

4.5使用 POST 請求讀取資料

發送 HTTP POST 請求以在 File Exchange 中搜尋在過去七天中上傳的包含單詞 Simulink 的檔案。

url = ‘http://www.mathworks.com/matlabcentral/fileexchange/‘;options = weboptions(‘RequestMethod‘,‘post‘);data = webread(url,‘term‘,‘simulink‘,‘duration‘,7,options);

許多 Web 服務除了提供 GET 方法外還提供 POST 方法用於請求資料。

4.6將日期和時間指定為查詢參數

從 NASA Earth Observation (NEO) Web Mapping Service 讀取 2004 年 12 月的一幅“Blue Marble:Next Generation”映像。

使用 datetime 對象指定所請求的映像的日期。指定 D 的 Format 屬性,使其格式與 Web 服務請求的格式相匹配。

url = ‘http://neowms.sci.gsfc.nasa.gov/wms/wms‘;D = datetime(2004,12,01,‘Format‘,‘yyyy-MM-dd‘);rgb = webread(url,‘Time‘,D, ...     ‘Service‘,‘WMS‘,‘Layers‘,‘BlueMarbleNG-TB‘,‘CRS‘,‘CRS:84‘, ...     ‘Format‘,‘image/jpeg‘,‘Height‘,256,‘Width‘,512, ...     ‘BBOX‘,‘-180.0,-90.0,180.0,90.0‘,‘Version‘,‘1.3.0‘,‘Request‘,‘GetMap‘);imshow(rgb)

webread 轉換 datetime 對象,以便它們可以作為 Web 服務查詢參數的值。樣本中的所有名稱-值對組提供了由 NEO Web Mapping Service 指定的查詢參數。

Blue Marble:Next Generation + Topography and Bathymetry 映像由 NASA 的 Earth Observatory 提供。NEO Web Mapping Service (WMS) 提供對映像和服務的存取權限。(請參閱 NASA Earth Observations 瞭解致謝名單和使用規定。有關 WMS 查詢參數,請搜尋 NASA Earth Observations 網站 https://neo.sci.gsfc.nasa.gov/about/wms.php。)

5.輸入參數 5.1   url - Web 服務的 URL
字元數組

Web 服務的 URL,指定為字元數組。Web 服務實現 RESTful 介面。有關詳細資料,請參閱 RESTful。

樣本: webread(‘http://www.mathworks.com/matlabcentral‘) 讀取網頁並以字元數組形式返回其 HTML。

5.2   QueryName1,QueryValue1,...,QueryNameN,QueryValueN - Web 服務查詢參數
名稱-值對組

Web 服務查詢參數,指定為一個或多個名稱-值對組參數。QueryName 參數必須指定查詢參數的名稱。QueryValue 參數必須是字元數組或者用於指定查詢參數值的數值、邏輯值或 datetime 值。數值、邏輯值和 datetime 值可以置於數組中。Web 服務定義作為請求的一部分而被接受的名稱-值對組。

當您將 QueryValue 指定為 datetime 對象時,必須指定其 Format 屬性,以便它與 Web 服務要求的格式一致。如果 Format 屬性包含時區或位移量,而 datetime 對象未設定時區,則 webread 會將 ‘Local‘ 指定為時區。

當 QueryValue 在一個數組中包含多個值時,可能需要指定 weboptions 對象的 ArrayFormat 屬性,以按照 Web 服務指定的方式對該數組進行表單編碼。

樣本: webread(‘http://www.mathworks.com/matlabcentral/fileexchange/‘,‘term‘,‘webread‘) 檢索上傳至 File Exchange 且包含單詞 webread 的檔案的列表。

5.3  options - 其他 HTTP 要求選項
weboptions 對象

其他 HTTP 要求選項,指定為 weboptions 對象。

可指定 weboptions 對象的 ContentType 屬性,並將該對象作為輸入參數傳遞到 webread。然後,webread 會將 data 作為該類型的輸出返回。該表列出了您可以在 weboptions 對象中指定的有效內容類型。

ContentType 設定符

輸出類型

‘auto‘(預設值)

基於內容類型自動確定輸出類型。

‘text‘

內容類型的字元向量:

text/plain
text/html
text/xml
application/xml
application/javascript
application/x-javascript
application/x-www-form-urlencoded

如果 Web 服務返回一個具有 .m 副檔名的 MATLAB? 檔案,則該函數將以字元向量形式返回該檔案的內容。

‘image‘

image/format 內容的數值或邏輯矩陣。如果第一個輸出參數是索引映像,第二個輸出參數是顏色圖,第三個輸出參數是 Alpha 色板。

有關受支援的映像格式,請參閱支援的匯入和匯出檔案格式。

‘audio‘

audio/format 內容的數值矩陣(數值標量採樣率作為第二個輸出參數)。

有關受支援的音頻格式,請參閱支援的匯入和匯出檔案格式。

‘binary‘

二進位內容的 uint8 列向量,此處的二進位內容是指那些不能作為 char 類型進行處理的內容。

‘table‘

試算表和 CSV (text/csv) 內容的標量表格對象。

‘json‘

application/json 內容的 char、數值、邏輯值、結構體或元胞數組。

‘xmldom‘

text/xml 或 application/xml 內容的 Java? 文件物件模型 (DOM) 節點。如果未指定,則該函數將以字元向量形式返回 XML 內容。

‘raw‘

‘text‘‘xmldom‘ 和 ‘json‘ 內容的 char 列向量。該函數將以 uint8 列向量的形式返回所有其他內容類型。

有關作為 weboptions 屬性的所有請求選項,請參閱 weboptions

6.輸出參數

 

6.1  data - Web 服務中的內容
標量 | 數組 | 結構體 | 表

從 Web 服務讀取的內容,以標量、數組、結構體或表的形式返回。

6.2  colormap - 與索引映像關聯的顏色圖
數值數組

與索引映像關聯的顏色圖,以數值數組的形式返回。

6.3  alpha - 與索引映像關聯的 Alpha 通道
數值數組

與索引映像關聯的 Alpha 通道,以數值數組的形式返回。

6.4  Fs - 音頻資料的採樣率(以赫茲為單位)
正數值標量

音頻資料的採樣率(以赫茲為單位),以正數值標量的形式返回。

 

 7.提示
  • 有關 RESTful Web 服務函數不支援的功能,請參閱 HTTP 介面。

  • webread 支援 HTTP GET 和 POST 方法。許多 Web 服務同時提供 GET 和 POST 方法用於請求資料。要發送 HTTP POST 請求,請將 options 的 RequestMethod 屬性指定為 ‘post‘。但是,webread將查詢選項放入 url,而不是放入請求訊息的主體。要將查詢放入訊息主體,請使用 webwrite

  • 對於 HTTP POST 請求,webread 函數僅支援 application/x-www-form-urlencoded 媒體類型。要將 POST 請求與任何其他 Internet 媒體類型的內容一起發送,請使用 webwrite

Matlab 爬蟲 Web Scraping with Matlab 01--認識基本函數webread

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.