HTML 敏捷包 <pre> 标签

HTML Agility Pack <pre> tag

我正在尝试使用 C# 中的 HTML Agility Pack 抓取具有 "pre" 标签的网站。我可以找到大量 "table tr td" 个示例,但找不到任何 "pre" 个示例。这是我的代码,内联格式化文本 "pre"。

private void PreformattedTextButton_Click(object sender, EventArgs e)
    {
        var url = @"http://www.thepredictiontracker.com/basepred.php";
        var data = new MyWebClient().DownloadString(url);
        var doc = new HtmlAgilityPack.HtmlDocument();
        doc.LoadHtml(data);

        //            m _        a _        e d     d d     d d     d l     n
        //e       h d       v r    1     2     3     4     5     6     2     s

        //  BAL D.BUNDY TAM C.ARCHER     7.5  7.48  8.08  7.00  5.58  4.70.     .    6.46
        //  CIN H.BAILEY ATL S.NEWCOMB    9.0  9.72 10.08 10.00 11.62 11.51.     .   10.73

        foreach (HtmlNode pre in doc.DocumentNode.SelectNodes("//pre"))
        {
            textBox1.Text += pre.InnerText + System.Environment.NewLine;
        }
    }

我想捕捉看起来像第 3 行和第 4 行的行,忽略前面的行。

foreach 已执行,但它有 pre.InnerText.Length 个 1642,这是预格式化文本的总数。我想捕获一行数据。例如第 3 和第 4 行。

根据定义,<pre> 标签是预先格式化的文本,因此您需要自己解析 InnerText 属性。您在上面提供的示例的格式一致,因此将 InnerText 拆分为一组行,然后使用 Regex 捕获您想要的行。 已测试并正常工作 代码示例:

var url = @"http://www.thepredictiontracker.com/basepred.php";
HtmlDocument doc = new HtmlWeb().Load(url);
var regexMatch = new Regex(
    @"^\s*[A-Z]{3}\s+[A-Z]\.[A-Z]+\s+[A-Z]{3}", 
    RegexOptions.Compiled
);
foreach (HtmlNode pre in doc.DocumentNode.SelectNodes("//pre"))
{
    foreach (var line in pre.InnerText.Split(new char[] { '\r', '\n' }))
    {
        if (regexMatch.IsMatch(line))
        {
            Console.WriteLine(line.Trim());
        }
    }
}