• Matlab 爬虫 Web Scraping with Matlab 01--认识基本函数webread


    注:以下内容部分来自于mathworks

    webread

    从 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

  • 相关阅读:
    老旧ObjectARX SDK下载地址
    AutoCAD Civil 3D .NET 二次开发 勘误
    lisp网站
    Autodesk论坛中看到的一段代码,留存备用
    revit图纸导出dxf文件批量修改
    查询给定区域内曲面平均高程
    angular 输入型指令directive
    get set方法
    android 环境配置
    使用nginx启动angular项目
  • 原文地址:https://www.cnblogs.com/mathpro/p/9023443.html
Copyright © 2020-2023  润新知