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());
}
}
}
我正在尝试使用 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());
}
}
}