网络编程:HTML抓取、REST服务与数据处理
立即解锁
发布时间: 2025-08-26 01:42:34 阅读量: 12 订阅数: 47 AIGC 

### 网络编程:HTML 抓取、REST 服务与数据处理
在网络编程中,当我们了解了可访问网站的规则后,就可以开始下载内容了。本文将从最基础的普通 HTML 文件开始,介绍如何操作不同类型的内容,包括 HTML 抓取、使用 REST 等简单 Web 服务,以及处理不同类型的数据。
#### 1. HTML 抓取
从网页获取信息的一种原始方法是挖掘 HTML 页面的原始标记。这种方法比较脆弱,因为如果页面结构发生修改,代码对页面结构的假设很容易被打破。但在某些情况下,HTML 抓取是唯一的选择。例如,在亚马逊和 eBay 等网站提供 Web 服务之前,开发者常使用屏幕抓取技术来获取价格详情、销售排名和产品图片等信息。
下面通过一个示例展示如何从 HTML 表格中提取信息。该表格列出了不同历史时期的世界人口数量,基于维基百科的信息。表格结构如下:
```html
<table>
<tr>
<th>Year</th>
<th width="70">World</th>
</tr>
<tr>
<th>70,000 BCE</th>
<td>2</td>
</tr>
<tr>
<th>10,000 BCE</th>
<td>1,000</td>
</tr>
<tr>
<th>9000 BCE</th>
<td>3,000</td>
</tr>
...
</table>
```
可以使用 `WebClient` 类下载整个 HTML 文档,然后自行解析数据。`WebClient` 提供了 `DownloadStringAsync()` 方法,可将结果作为单个字符串返回,该字符串包含整个页面的 HTML。
当用户点击“获取数据”按钮时,会创建一个新的 `WebClient` 对象,并调用 `DownloadStringAsync()` 方法:
```csharp
private void cmdGetData_Click(object sender, RoutedEventArgs e)
{
WebClient client = new WebClient();
Uri address = new Uri("http://localhost:" +
HtmlPage.Document.DocumentUri.Port + "/ASPWebSite/PopulationTable.html");
client.DownloadStringCompleted += client_DownloadStringCompleted;
client.DownloadStringAsync(address);
}
```
接收结果的代码如下:
```csharp
private void client_DownloadStringCompleted(object sender,
DownloadStringCompletedEventArgs e)
{
string pageHtml = "";
try
{
pageHtml = e.Result;
}
catch
{
lblResult.Text = "Error contacting service.";
return;
}
// 后续处理代码
}
```
从 HTML 字符串中提取所需信息时,使用正则表达式会更方便。在这个例子中,需要找到如下形式的 HTML 片段:
```html
<th>500 BCE</th><td>100,000</td>
```
可以使用命名组来构建正则表达式,示例中的命名组为 `(?<population>.*)`,表示捕获任意字符。完整的正则表达式示例如下:
```csharp
string pattern = "<th>" + txtYear.Text + "</th>" + @"\s*" + "<td>" +
"(?<population>.*)" + "</td>";
Regex regex = new Regex(pattern);
Match match = regex.Match(pageHtml);
string people = match.Groups["population"].Value;
if (people == "")
lblResult.Text = "Year not found.";
else
lblResult.Text = match.Groups["population"].Value + " people.";
```
#### 2. REST 和其他简单 Web 服务
近年来,简单 Web 服务重新兴起。这些服务避免了详细的 SOAP 协议和 WS - * 标准的复杂性。简单 Web 服务无法完全替代基于 SOAP 的 Web 服务,因为它们不能解决分布式处理中的一些实际挑战,如路由、事务和安全等问题。但它们简洁的结构使其成为构建公共 Web 服务的理想选择,能与尽可能广泛的客户端兼容。许多顶级网站(如亚马逊、eBay 和谷歌)为其 Web 服务提供了基于 REST 和 SOAP 的接口。
##### 2.1 SOAP 与 REST 的对比
所有 Web 服务都通过 HTTP 传递消息,但在信息传递和返回的方式上存在差异。
| 对比项 | SOAP | REST |
| ---- | ---- | ---- |
| 数据结构 | 将数据放入特定的 XML 结构(SOAP 文档) | 输入值可通过 URL 或消息体中的名值对提供,响应可能是纯字符串数据或 XML |
| 构建难度 | 在没有内置 SOAP 支持的平台上构建消息更复杂 | 构建相对简单,开销较小,但缺乏真正的类型检查 |
| 优点 | 使用强类型数据,通过 SOAP 头具有高度可扩展性 | 简洁的
0
0
复制全文
相关推荐










