C#对HTML文档的解析

简介: 相信很多人都有过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; }
    }

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

最后看一下解析的结果:



目录
相关文章
|
9月前
|
人工智能 自然语言处理 搜索推荐
ViDoRAG:开源多模态文档检索框架,多智能体推理+图文理解精准解析文档
ViDoRAG 是阿里巴巴通义实验室联合中国科学技术大学和上海交通大学推出的视觉文档检索增强生成框架,基于多智能体协作和动态迭代推理,显著提升复杂视觉文档的检索和生成效率。
554 8
ViDoRAG:开源多模态文档检索框架,多智能体推理+图文理解精准解析文档
|
10月前
|
数据采集 存储 调度
BeautifulSoup VS Scrapy:如何选择适合的HTML解析工具?
在Python网页抓取领域,BeautifulSoup和Scrapy是两款备受推崇的工具。BeautifulSoup易于上手、灵活性高,适合初学者和简单任务;Scrapy则是一个高效的爬虫框架,内置请求调度、数据存储等功能,适合大规模数据抓取和复杂逻辑处理。两者结合使用可以发挥各自优势,例如用Scrapy进行请求调度,用BeautifulSoup解析HTML。示例代码展示了如何在Scrapy中设置代理IP、User-Agent和Cookies,并使用BeautifulSoup解析响应内容。选择工具应根据项目需求,简单任务选BeautifulSoup,复杂任务选Scrapy。
207 1
BeautifulSoup VS Scrapy:如何选择适合的HTML解析工具?
|
9月前
|
机器学习/深度学习 人工智能 文字识别
从“泛读”到“精读”:合合信息文档解析如何让大模型更懂复杂文档?
随着deepseek等大模型逐渐步入视野,理论上文档解析工作应能大幅简化。 然而,实际情况却不尽如人意。当前的多模态大模型虽然具备强大的视觉与语言交互能力,但在解析非结构化文档时,仍面临复杂版式、多元素混排以及严密逻辑推理等挑战。
316 0
|
10月前
|
数据采集 前端开发 API
SurfGen爬虫:解析HTML与提取关键数据
SurfGen爬虫:解析HTML与提取关键数据
|
XML 数据采集 数据格式
Python 爬虫必备杀器,xpath 解析 HTML
【11月更文挑战第17天】XPath 是一种用于在 XML 和 HTML 文档中定位节点的语言,通过路径表达式选取节点或节点集。它不仅适用于 XML,也广泛应用于 HTML 解析。基本语法包括标签名、属性、层级关系等的选择,如 `//p` 选择所有段落标签,`//a[@href=&#39;example.com&#39;]` 选择特定链接。在 Python 中,常用 lxml 库结合 XPath 进行网页数据抓取,支持高效解析与复杂信息提取。高级技巧涵盖轴的使用和函数应用,如 `contains()` 用于模糊匹配。
293 7
|
存储 人工智能 自然语言处理
高效档案管理案例介绍:文档内容批量结构化解决方案解析
档案文件内容丰富多样,传统人工管理耗时低效。思通数科AI平台通过自动布局分析、段落与标题检测、表格结构识别、嵌套内容还原及元数据生成等功能,实现档案的高精度分块处理和结构化存储,大幅提升管理和检索效率。某历史档案馆通过该平台完成了500万页档案的数字化,信息检索效率提升60%。
422 5
|
自然语言处理 并行计算 数据可视化
免费开源法律文档比对工具:技术解析与应用
这款免费开源的法律文档比对工具,利用先进的文本分析和自然语言处理技术,实现高效、精准的文档比对。核心功能包括文本差异检测、多格式支持、语义分析、批量处理及用户友好的可视化界面,广泛适用于法律行业的各类场景。
580 1
|
XML JavaScript 前端开发
如何解析一个 HTML 文本
【10月更文挑战第23天】在实际应用中,根据具体的需求和场景,我们可以灵活选择解析方法,并结合其他相关技术来实现高效、准确的 HTML 解析。随着网页技术的不断发展,解析 HTML 文本的方法也在不断更新和完善,
|
JavaScript API 开发工具
<大厂实战场景> ~ Flutter&鸿蒙next 解析后端返回的 HTML 数据详解
本文介绍了如何在 Flutter 中解析后端返回的 HTML 数据。首先解释了 HTML 解析的概念,然后详细介绍了使用 `http` 和 `html` 库的步骤,包括添加依赖、获取 HTML 数据、解析 HTML 内容和在 Flutter UI 中显示解析结果。通过具体的代码示例,展示了如何从 URL 获取 HTML 并提取特定信息,如链接列表。希望本文能帮助你在 Flutter 应用中更好地处理 HTML 数据。
412 1
|
XML 数据格式
HTML 实例解析
本文介绍了HTML中常见元素的使用方法,包括`&lt;p&gt;`、`&lt;body&gt;`和`&lt;html&gt;`等。详细解析了这些元素的结构和作用,并强调了正确使用结束标签的重要性。此外,还提到了空元素的使用及大小写标签的规范。

推荐镜像

更多
  • DNS