在 C# 开发中快速抓取网页某个内容的方法

C# 提供的标准类库中并不含有解析 HTML 的功能,这使得在开发过程中如果要抓取 HTML 网页中的某一块内容会变得特别麻烦。

今天偶然发现了一个比较轻松的、可以通过快速抓取 HTML 中网页某部分内容的方法,基于第三方包。


首先我们需要通过 Nuget 给项目安装名为“HtmlAgilityPack”的包,这是一个下载量很高的 HTML 解析包。

安装好之后我们在项目中通过 using 导入。

HtmlAgilityPack 获取 HTML 网页源代码的方式有很多种,它支持通过字符串加载 HTML 网页的内容,也支持直接通过 URL 自动获取。如果使用字符串导入,大概是下面这个样子:

string html;
HtmlDocument document = new HtmlDocument();
document.LoadHtml(html);

如果是通过 URL 直接获取,那么是这个样子:

var html = @"http://baidu.com"
HtmlWeb web = new HtmlWeb():
var htmlDoc = web.Load(html);

在成功加载好 HTML 之后,这个包提供了一个选择器来筛选 HTML 网页中的内容,关于这个选择器其官网的 API 文档并没有说得特别详细,但是有一点可以知道的是 SelectSingleNode() 这个方法是通过“XPath”来筛选 HTML 内容的。

那么这就特别方便了,Chrome 的 F12(开发者工具)允许我们直接拷贝网页中某个元素的 XPath。

通过这个“Copy XPath”,我们可以直接简单地使用 HtmlAgilityPack 来获取网页中的某个元素,需要注意的是 Chrome 复制出来的 XPath 需要手动在代码中处理转义字符。

最终我们只需要如下一行特别简单的代码就可以筛选出特定的 Node。

var node = document.DocumentNode.SelectSingleNode("//*[@id='registrarData']");

node 本身自带了 innerHTML 等属性,可以很方便地进行文本提取之类的操作。

共有 0 条评论

    Top