C#对HTML文档的解析

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
简介: 相信很多人都有过HTML文档解析的需求。比如我们抓取了某1个网站的页面数据,格式就是HTML的格式。

相信很多人都有过HTML文档解析的需求。比如我们抓取了某1个网站的页面数据,格式就是HTML的格式。以前我们都是通过正则表达式来进行解析,但是发现有一些问题。解析HTML文档时并不容易,如果文档的格式稍有变化很可能就不能正确的匹配。因此我们需要专门的工具来帮助我们轻松的解析HTML文档。

其实已经有一个非常不错的工具提供了。比如HtmlAgilityPack。它可以帮助我们解析HTML文档就像用XmlDocument类来解析XML一样轻松、方便。

这个工具可以在http://htmlagilitypack.codeplex.com/下载到,里面有支持各种.NET Framework的版本的dll。

好了,下面提供一个足够Simple的例子给大家。大家可以在此基础之上,举一反三。

比如要解析下面的HTML。

<table>
	<thead>
		<tr>
			<th>时间</th>
			<th>类型</th>
			<th>名称</th>
			<th>单位</th>
			<th>金额</th>
		</tr>
	</thead>
	<tbody>
		<tr>
			<td>2013-12-29</td>
			<td>发票1</td>
			<td>采购物资发票1</td>
			<td>某某公司1</td>
			<td>123元</td>
		</tr>
		<tr>
			<td>2013-12-29</td>
			<td>发票2</td>
			<td>采购物资发票2</td>
			<td>某某公司2</td>
			<td>321元</td>
		</tr>
	<tbody>
</table>

以控制台项目为例,首先要引用HtmlAgilityPack.dll文件,这样才能使用dll里面的类和方法。

        static void Main(string[] args)
        {
            string strWebContent = @"<table><thead>
            <tr>
              <th>时间</th>
              <th>类型</th>
              <th>名称</th>
              <th>单位</th>
              <th>金额</th>
            </tr>
            </thead>
            <tbody>" +
            @"<tr>
              <td>2013-12-29</td>
              <td>发票1</td>
              <td>采购物资发票1</td>
              <td>某某公司1</td>
              <td>123元</td>
            </tr>" +
            @"<tr>
              <td>2013-12-29</td>
              <td>发票2</td>
              <td>采购物资发票2</td>
              <td>某某公司2</td>
              <td>321元</td>
            </tr>
            </tbody>
          </table>
        ";

            List<Data> datas = new List<Data>();//定义1个列表用于保存结果

            HtmlDocument htmlDocument = new HtmlDocument();
            htmlDocument.LoadHtml(strWebContent);//加载HTML字符串,如果是文件可以用htmlDocument.Load方法加载

            HtmlNodeCollection collection = htmlDocument.DocumentNode.SelectSingleNode("table/tbody").ChildNodes;//跟Xpath一样,轻松的定位到相应节点下
            foreach (HtmlNode node in collection)
            {
                //去除\r\n以及空格,获取到相应td里面的数据
                string[] line = node.InnerText.Split(new char[] { '\r', '\n', ' ' }, StringSplitOptions.RemoveEmptyEntries);

                //如果符合条件,就加载到对象列表里面
                if (line.Length == 5)
                    datas.Add(new Data() { 时间 = line[0], 类型 = line[1], 名称 = line[2], 单位 = line[3], 金额 = line[4] });
            }

            //循环输出查看结果是否正确
            foreach (var v in datas)
            {
                Console.WriteLine(string.Join(",", v.时间, v.类型, v.名称, v.单位, v.金额));
            }
        }

    /// <summary>
    /// 定义的实体类用于接收数据
    /// </summary>
    public class Data
    {
        public string 时间 { get; set; }
        public string 类型 { get; set; }
        public string 名称 { get; set; }
        public string 单位 { get; set; }
        public string 金额 { get; set; }
    }

上面就是完整的代码,注释也很清楚。

最后看一下解析的结果:



目录
相关文章
|
12天前
|
XML 数据采集 数据格式
Python 爬虫必备杀器,xpath 解析 HTML
【11月更文挑战第17天】XPath 是一种用于在 XML 和 HTML 文档中定位节点的语言,通过路径表达式选取节点或节点集。它不仅适用于 XML,也广泛应用于 HTML 解析。基本语法包括标签名、属性、层级关系等的选择,如 `//p` 选择所有段落标签,`//a[@href=&#39;example.com&#39;]` 选择特定链接。在 Python 中,常用 lxml 库结合 XPath 进行网页数据抓取,支持高效解析与复杂信息提取。高级技巧涵盖轴的使用和函数应用,如 `contains()` 用于模糊匹配。
|
5月前
|
数据挖掘 Shell 测试技术
怎么用Python解析HTML轻松搞定网页数据
**Python解析HTML摘要** 本文介绍了使用Python处理HTML的常见需求,如数据提取、网络爬虫和分析,并讨论了三种解析方法。正则表达式适用于简单匹配,但对复杂HTML不理想;BeautifulSoup提供简单API,适合多数情况;lxml结合XPath,适合处理大型复杂文档。示例展示了如何用这些方法提取链接。
144 2
|
1月前
|
存储 人工智能 自然语言处理
高效档案管理案例介绍:文档内容批量结构化解决方案解析
档案文件内容丰富多样,传统人工管理耗时低效。思通数科AI平台通过自动布局分析、段落与标题检测、表格结构识别、嵌套内容还原及元数据生成等功能,实现档案的高精度分块处理和结构化存储,大幅提升管理和检索效率。某历史档案馆通过该平台完成了500万页档案的数字化,信息检索效率提升60%。
|
1月前
|
XML JavaScript 前端开发
如何解析一个 HTML 文本
【10月更文挑战第23天】在实际应用中,根据具体的需求和场景,我们可以灵活选择解析方法,并结合其他相关技术来实现高效、准确的 HTML 解析。随着网页技术的不断发展,解析 HTML 文本的方法也在不断更新和完善,
|
1月前
|
JavaScript API 开发工具
<大厂实战场景> ~ Flutter&鸿蒙next 解析后端返回的 HTML 数据详解
本文介绍了如何在 Flutter 中解析后端返回的 HTML 数据。首先解释了 HTML 解析的概念,然后详细介绍了使用 `http` 和 `html` 库的步骤,包括添加依赖、获取 HTML 数据、解析 HTML 内容和在 Flutter UI 中显示解析结果。通过具体的代码示例,展示了如何从 URL 获取 HTML 并提取特定信息,如链接列表。希望本文能帮助你在 Flutter 应用中更好地处理 HTML 数据。
110 1
|
2月前
|
XML 数据格式
HTML 实例解析
本文介绍了HTML中常见元素的使用方法,包括`&lt;p&gt;`、`&lt;body&gt;`和`&lt;html&gt;`等。详细解析了这些元素的结构和作用,并强调了正确使用结束标签的重要性。此外,还提到了空元素的使用及大小写标签的规范。
|
2月前
|
XML 前端开发 数据格式
Beautiful Soup 解析html | python小知识
在数据驱动的时代,网页数据是非常宝贵的资源。很多时候我们需要从网页上提取数据,进行分析和处理。Beautiful Soup 是一个非常流行的 Python 库,可以帮助我们轻松地解析和提取网页中的数据。本文将详细介绍 Beautiful Soup 的基础知识和常用操作,帮助初学者快速入门和精通这一强大的工具。【10月更文挑战第11天】
65 2
|
2月前
|
存储 文字识别 算法
解析!文档扫描 SDK 中的高级图像处理技术
本博客讨论了图像质量在文档扫描中的重要性,解决了扫描过程中遇到的常见挑战,以及文档扫描 SDK 利用先进的图像处理技术来应对这些挑战。
|
2月前
|
前端开发 JavaScript
pyquery:一个灵活方便的 HTML 解析库
pyquery:一个灵活方便的 HTML 解析库
27 1
|
3月前
|
数据采集 存储 JavaScript
如何使用Cheerio与jsdom解析复杂的HTML结构进行数据提取
在现代网页开发中,复杂的HTML结构给爬虫技术带来挑战。传统的解析库难以应对,而Cheerio和jsdom在Node.js环境下提供了强大工具。本文探讨如何在复杂HTML结构中精确提取数据,结合代理IP、cookie、user-agent设置及多线程技术,提升数据采集的效率和准确性。通过具体示例代码,展示如何使用Cheerio和jsdom解析HTML,并进行数据归类和统计。这种方法适用于处理大量分类数据的爬虫任务,帮助开发者轻松实现高效的数据提取。
如何使用Cheerio与jsdom解析复杂的HTML结构进行数据提取

推荐镜像

更多