【问题标题】:HTML Agility Pack <pre> tagHTML 敏捷包 <pre> 标签
【发布时间】:2018-10-07 11:22:04
【问题描述】:

我正在尝试使用 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 行。

【问题讨论】:

  • 所以你是说你的foreach 循环的内部内容永远不会被执行? (即doc.DocumentNode.SelectNodes("//pre").GetEnumerator().MoveNext() == false)
  • 执行了内部循环,但它捕获了所有预先格式化的文本。我只想捕获文本行。例如第 3 行和第 4 行。

标签: c# tags html-agility-pack


【解决方案1】:

根据定义&lt;pre&gt;标签是预先格式化的文本,所以你需要自己解析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());
        }
    }
}

【讨论】:

  • 感谢 kuujinbo,它有效。你的回答很完整。感谢您的帮助。
猜你喜欢
  • 2023-03-25
  • 2012-01-19
  • 1970-01-01
  • 1970-01-01
  • 2011-01-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多