我需要从外部URL中提取div内第二个表的内容tr和td。我无法使用HtmlAglitityPack。
设计是这样的:
<div class="class1" id="content-main">
<table width="90%">
<tbody>
<tr><td class="table_left_corner"> </td><td class="table_head">table1 </td><td class="table_right_corner"> </td></tr>
</tbody>
</table>
<table width="90%">
<tbody>
<tr><td class="table_left_corner"> </td><td class="table_head">table2</td><td class="table_right_corner"> </td></tr>
</tbody>
</table>
<table width="90%">
<tbody>
<tr><td class="table_left_corner"> </td><td class="table_head">table3 </td><td class="table_right_corner"> </td></tr>
</tbody>
</table>
</div>
所以我想使用一些Regex函数来返回表的内容。
using (WebClient client = new WebClient())
{
string htmlcode= client.DownloadString("http://www.example.com");
string r = @"<div.*?id=""content-main"".*?>.*</div>";
Match match2 = Regex.Match(htmlcode, r);
string a = match2.Groups[1].Value;
}
我使用不同的正则表达式,但都失败了。所以请帮忙。我怎样才能获得第二张桌子的内容。
编辑2 使用HTMLAglityPack
var web = new HtmlWeb();
var document = web.Load("http://www.example.com/");
var page = document.DocumentNode;
string outerHTML = page.SelectNodes("//table")[5].OuterHtml;
Match match1;
match1 = Regex.Match(outerHTML, @"<a [^>]+>(.*?)<\/a>");
while (match1.Success)
{
string NAme = match1.Groups[1].Value;
var webloc = new HtmlWeb();
dynamic documentloc = null;
documentloc = webloc.Load(urlAddress + NAme.Replace(" ", "-").ToLower());
dynamic pageloc = documentloc.DocumentNode;
string outerHTMLloc = pageloc.SelectNodes("//table")[5].OuterHtml;
match1 = match1.NextMatch();
}
第一次成功运行但第二次出现时,它会在&#34; outerHTMLloc&#34;
上引发错误错误:&#34;未处理的类型&#39; System.StackOverflowException&#39;发生在HtmlAgilityPack.DLL&#34;
答案 0 :(得分:0)
假设您希望div中第二个表的值为id'content-main',那么您的代码应为:
string value=pageloc.SelectNodes("//div[@id='content-main']//table") //select all table tags inside div tag
.Skip(1) //skip the first table
.First() //take the second table
.InnerHtml;