繁体   English   中英

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());
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM