新闻中心
使用 HtmlAgilityPack 精确解析 HTML 文档中的特定表格

本教程详细介绍了如何使用 c# 中的 htmlagilitypack 库,从包含多个表格的 html 文档中准确选择并解析特定的 html 表格。文章纠正了常见的 xpath 使用误区,强调了在选定节点上下文中执行查询的重要性,并提供了完整的代码示例,帮助开发者高效、精确地提取所需数据。
在 Web 数据抓取和 HTML 解析任务中,HtmlAgilityPack 是 .NET 开发者常用的强大工具。它能够将 HTML 文档解析成 DOM 结构,并通过 XPath 或 CSS 选择器方便地查询和操作节点。然而,当 HTML 文档包含多个结构相似的元素(例如多个
) 查询都应该在 这个选定的表格节点 的上下文中进行。using HtmlAgilityPack;
using System.Data;
using System.Linq; // For .Skip()
public class TableParser
{
public DataTable ParseFirstTable(string htmlContent)
{
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(htmlContent);
DataTable dt = new DataTable();
// 假设我们知道表格结构,预先定义列
dt.Columns.Add("Co2. 解析第二个表格解析第二个表格的方法与第一个表格类似,只需将 XPath 表达式改为 //table[2] 即可。 using HtmlAgilityPack;
using System.Data;
using System.Linq;
public class TableParser
{
// ... (ParseFirstTable 方法省略) ...
public DataTable ParseSecondTable(string htmlContent)
{
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(htmlContent);
DataTable dt = new DataTable();
// 假设我们知道表格结构,预先定义列
dt.Columns.Add("ColumnX", typeof(string));
dt.Columns.Add("ColumnY", typeof(string));
// 选中第二个表格节点
HtmlNode table = doc.DocumentNode.SelectSingleNode("//table[2]");
if (table != null)
{
var rows = table.SelectNodes("tr");
if (rows != null)
{
foreach (var row in rows.Skip(1)) // 假设第一行是表头
{
var cells = row.SelectNodes("td");
if (cells != null && cells.Count >= 2)
{
string colX = cells[0].InnerText.Trim();
string colY = cells[1].InnerText.Trim();
dt.Rows.Add(colX, colY);
}
}
}
}
return dt;
}
}关键注意事项
|
以上就是使用 HtmlAgilityPack 精确解析 HTML 文档中的特定表格的详细内容,更多请关注其它相关文章!
# 所需
# 东营定制网站建设价格
# 网络营销推广哪家做得好
# 天津网站建设基础步骤
# 兰州新网站seo平台
# 淄博抖音关键词排名厂家
# 开平电影网站建设
# 山西网站建设最便宜
# 汶上seo推广找哪家
# 网络推广网站只选k火28星
# 网络公司推广营销
# 选择了
# 子树
# css
# 更精确
# 单选框
# 多个
# 表单
# 第二个
# 文档
# 第一个
# .net
# c#
# 工具
# node
# html
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
C++如何实现线程池_C++11手动实现一个简单的固定大小线程池
微博网页版官方账号登录 微博网页版内容浏览使用指南
poki免费入口快捷访问 poki人气小游戏直接玩站点
腾讯视频怎么使用多账号家庭管理_腾讯视频家庭多账号统一管理与权限分配教程
解决macOS上安装pyhdf时‘hdf.h’文件缺失的编译错误
在python-socketio事件处理器中安全访问Flask应用上下文
在Go开发中优雅管理ListenAndServe进程:GoSublime集成方案
mcjs网页版流畅运行 mcjs低配电脑畅玩入口
怎么去除衣服上的口红印_生活小妙招教你用酒精轻松擦除
c++如何使用std::memory_order控制原子操作顺序_c++ C++11内存模型详解
在命令行怎么运行html项目_命令行运行html项目方法【教程】
Go语言中JSON数据解析与字段访问教程
在Typer应用中优雅地处理和重组任意命令行参数
新手怎么开始学化妆 零基础化妆入门教程
怎么在浏览器上运行HTML文件_浏览器运行HTML文件技巧【技巧】
圆通快递查询实时追踪 圆通物流包裹状态快速查看
c++中的std::basic_string的SSO优化_c++短字符串优化深度解析
Lar*el如何生成PDF或Excel文件_Lar*el文档导出工具与使用教程
淘宝支付提示失败如何解决 淘宝支付流程优化方法
使用J*aScript检测输入元素是否包含在特定类中
格力空气能E5故障代码是什么情况_格力空气能E5代码解析与应对措施
React中useState与局部变量:理解组件状态管理与渲染机制
汽水音乐车机版8.9下载 汽水音乐车机版8.9版本安装入口
12306选座怎么选到特殊座位_12306特殊座位选择注意事项
谷歌google账号注册详细步骤 谷歌账号注册官方教程
C++ map遍历方法大全_C++ map迭代器使用总结
Yandex免登录官网入口_俄罗斯Yandex搜索引擎直达链接
Win11怎么设置开机NumLock亮 Win11修改注册表InitialKeyboardIndicators值
Golang如何实现微服务鉴权与权限控制_Golang微服务鉴权与权限管理实践
单射、满射与双射的关系 一文理清所有逻辑
Win11如何使用Windows Sandbox Win11沙盒功能开启与使用教程【详解】
在J*a中如何隐藏复杂性_使用门面模式组织对象交互
Eclipse怎么运行工程_Eclipse工程运行配置说明
“音游” × “怪文书” 题材的节奏冒险游戏 《晕晕电波症候群》确定于2026年4月发售!
qq邮箱发邮件给国外发不出去_QQ邮箱国际邮件发送失败原因与解决
腾讯QQ邮箱登录入口_QQ邮箱官方网站使用地址
正确连接J*aScript到HTML实现可点击图片与自定义事件处理
Sublime怎么配置Nim语言环境_Sublime Nim代码高亮与补全
PowerPoint如何制作滚动字幕结尾彩蛋_PowerPoint路径动画实现平滑滚动字幕效果
NVIDIA股价11月重挫12%:下月有望好转 但难回5万亿美元巅峰
Mac终端命令大全_Mac常用Terminal指令速查
PPT平滑切换怎么做 PPT炫酷“平滑”切换动画制作教程【必学】
机构:以往存储涨价周期小米利润率实际上有所改善 能转嫁给消费者等
如何在更新Composer依赖后自动运行测试_使用post-update-cmd钩子触发PHPUnit
GemBox Document HTML转PDF垂直文本渲染问题及解决方案
Excel文件在线转换快速入口 Excel在线格式转换网站
KFC套餐升级怎么获取优惠代码_KFC套餐升级活动与优惠代码获取方法
海棠电脑版入口_通过电脑访问海棠官网阅读
蓝湖怎样用切图标注提对接效率_蓝湖用切图标注提对接效率【设计对接】
EMS快递官网app_中国邮政速递物流手机客户端


2025-10-23
浏览次数:次
返回列表
lumnA", typeof(string));
dt.Columns.Add("ColumnB", typeof(string));
// 选中第一个表格节点
HtmlNode table = doc.DocumentNode.SelectSingleNode("//table[1]");
if (table != null)
{
// 在选定的 'table' 节点内部查找所有的 'tr' 节点
// 注意:这里使用 "tr" 或 ".//tr" 而不是 "//tr"
// "tr" 表示直接子元素,".//tr" 表示当前节点下的任意后代元素
// 考虑到表格结构,"tr" 通常是更精确和高效的选择
var rows = table.SelectNodes("tr");
if (rows != null)
{
// 跳过表头行(如果有的话),从第二行开始处理数据
foreach (var row in rows.Skip(1)) // 假设第一行是表头
{
var cells = row.SelectNodes("td"); // 在当前行 'row' 内部查找 'td' 节点
if (cells != null && cells.Count >= 2) // 确保有足够的单元格
{
string colA = cells[0].InnerText.Trim();
string colB = cells[1].InnerText.Trim();
dt.Rows.Add(colA, colB);
}
}
}
}
return dt;
}
}