You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改LINQ在HtmlAgilityPack爬取表格时获取单元格href

使用HtmlAgilityPack结合LINQ提取表格中a标签的Href属性

嘿,这事儿不难,我来给你一步步拆解怎么做:

首先,确保你已经安装了HtmlAgilityPack的NuGet包,这是实现功能的前提哈。

接下来核心思路很清晰:先定位到目标表格 → 遍历表格的每一行数据 → 从每行的第一个单元格里抓取a标签的href属性,同时获取第二个单元格的类型值。

下面是完整的代码示例,关键部分我都给你标清楚了:

// 先加载你的HTML文档,这里假设你已经拿到了目标页面的HTML内容
var htmlDoc = new HtmlDocument();
htmlDoc.LoadHtml(yourHtmlContent); // 替换成你的HTML字符串,或者用Load方法加载本地/远程文件

// 用LINQ配合XPath提取数据
var tableData = htmlDoc.DocumentNode
    // 精准定位到class为MyClass的目标表格
    .SelectSingleNode("//table[@class='MyClass']")
    // 获取表格主体里的所有数据行
    .SelectNodes("./tbody/tr")
    // 遍历每一行,提取需要的字段
    .Select(tr => new {
        // 提取第一个td内a标签的href属性,用?.避免空引用异常
        ItemLink = tr.SelectSingleNode("./td[1]/a")?.GetAttributeValue("href", string.Empty),
        // 提取第二个td的文本内容,Trim掉多余空格
        ItemType = tr.SelectSingleNode("./td[2]")?.InnerText.Trim()
    })
    // 过滤掉可能的无效行(比如没有href的情况)
    .Where(item => !string.IsNullOrEmpty(item.ItemLink))
    .ToList();

关键细节说明:

  • //table[@class='MyClass']:通过XPath按class属性定位目标表格,确保只处理你需要的那一个表格。
  • ./tbody/tr:只选择表格主体内的数据行,避免把表头行也混进来。
  • ?.GetAttributeValue("href", string.Empty):这里的空条件运算符?.能防止某行没有a标签时抛出异常;GetAttributeValue还可以指定默认值,属性不存在时就返回空字符串。
  • 如果你的表格结构有变动(比如a标签在其他单元格),只需要调整XPath里的td[1]为对应位置即可,比如td[3]代表第三个单元格。

内容的提问来源于stack exchange,提问作者edgarmtze

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:17:10