[英]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.