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

C#中如何用XPath按tr分组提取表格所有td元素

当然可以实现!用C#结合HtmlAgilityPack(处理HTML XPath的绝佳工具)就能轻松按<tr>分组提取所有<td>内容,完美匹配你想要的嵌套循环访问方式。下面是具体的实现步骤和代码示例:

第一步:安装依赖库

打开你的NuGet包管理器,搜索并安装HtmlAgilityPack——这个库专门用来处理HTML解析和XPath查询,比原生XML工具更适配不规范的HTML场景。

第二步:核心实现代码

using HtmlAgilityPack;
using System;
using System.Net.Http;
using System.Threading.Tasks;

class WorldCupGoalScraper
{
    static async Task Main(string[] args)
    {
        string targetUrl = "http://es.fifa.com/worldcup/archive/brazil2014/statistics/players/goal-scored.html";
        
        // 1. 获取目标页面的HTML内容
        using HttpClient client = new HttpClient();
        string htmlContent;
        try
        {
            // 可以添加User-Agent模拟浏览器请求,避免被反爬拦截
            client.DefaultRequestHeaders.UserAgent.ParseAdd("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36");
            htmlContent = await client.GetStringAsync(targetUrl);
        }
        catch (Exception ex)
        {
            Console.WriteLine($"获取页面失败: {ex.Message}");
            return;
        }

        // 2. 加载HTML到HtmlDocument进行解析
        HtmlDocument doc = new HtmlDocument();
        doc.LoadHtml(htmlContent);

        // 3. 用XPath选择所有表格行
        // 如果要排除表头行,可改用"//table//tr[td]",只选中包含<td>的数据行
        HtmlNodeCollection rows = doc.DocumentNode.SelectNodes("//table//tr");
        
        if (rows == null)
        {
            Console.WriteLine("未找到任何表格行");
            return;
        }

        // 4. 完全按照你想要的嵌套循环方式访问每个单元格
        for (int x = 0; x < rows.Count; x++)
        {
            HtmlNodeCollection cells = rows[x].SelectNodes(".//td");
            
            if (cells != null)
            {
                for (int y = 0; y < cells.Count; y++)
                {
                    // 清理单元格文本(去除多余空格、换行)
                    string cellContent = cells[y].InnerText.Trim().Replace("\n", "").Replace("\t", "");
                    Console.WriteLine($"行{x+1},列{y+1}: {cellContent}");
                    // 这里可以将内容添加到二维数组或集合中存储
                }
            }
            Console.WriteLine("--- 行分隔线 ---");
        }
    }
}

关键细节说明

  • XPath表达式://table//tr会匹配页面中所有表格的所有行;如果只想获取数据行(跳过表头的<th>行),可以把XPath改成//table//tr[td],只选中包含<td>元素的行。
  • 文本清理:InnerText.Trim().Replace("\n", "").Replace("\t", "")是为了去除HTML里的换行、制表符和多余空格,让提取的内容更规整。
  • 反爬注意:添加User-Agent请求头可以模拟浏览器访问,降低被目标网站拦截的概率。如果请求频繁被拒,可以尝试添加延迟重试机制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:01:06