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

Posted MathPro

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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








以上是关于Matlab 爬虫 Web Scraping with Matlab 01--认识基本函数webread的主要内容,如果未能解决你的问题,请参考以下文章

Python Web Scraping with Beautiful Soup - 遇到麻烦

Web_Scraping Techniques

Python中的Web Scraping

阅读OReilly.Web.Scraping.with.Python.2015.6笔记---Crawl

Python的基本Web Scraping(Beautifulsoup和Requests)

使用 Web Scraping 从网站获取数据