我试图下载一个包含这样的表的页面
<table id="content-table">
<tbody>
<tr>
<th id="name">Name</th>
<th id="link">link</th>
</tr>
<tr class="tt_row">
<td class="ttr_name">
<a title="name_of_the_movie" href="#"><b>name_of_the_movie</b></a>
<br>
<span class="pre">message</span>
</td>
<td class="td_dl">
<a href="download_link"><img alt="Download" src="#"></a>
</td>
</tr>
<tr class="tt_row"> .... </tr>
<tr class="tt_row"> .... </tr>
</tbody>
</table>
我想从td class =“ttr_name”中提取name_of_the_movie并从td class =“td_dl”下载链接
这是我用来遍历表格行的代码
HtmlAgilityPack.HtmlDocument hDocument = new HtmlAgilityPack.HtmlDocument();
hDocument.LoadHtml(htmlSource);
HtmlNode table = hDocument.DocumentNode.SelectSingleNode("//table");
foreach (var row in table.SelectNodes("//tr"))
{
HtmlNode nameNode = row.SelectSingleNode("td[0]");
HtmlNode linkNode = row.SelectSingleNode("td[1]");
}
目前我不知道如何检查nameNode和linkNode并在其中提取数据
任何帮助将不胜感激
此致
答案 0 :(得分:3)
我现在无法测试它,但它应该是以下几行:
string name= namenode.Element("a").Element("b").InnerText;
string url= linknode.Element("a").GetAttributeValue("href","unknown");
答案 1 :(得分:1)
nameNode.Attributes["title"]
linkNode.Attributes["href"]
假设你得到了正确的节点。
答案 2 :(得分:1)
public const string UrlExtractor = @"(?: href\s*=)(?:[\s""']*)(?!#|mailto|location.|javascript|.*css|.*this\.)(?<url>.*?)(?:[\s>""'])";
public static Match GetMatchRegEx(string text)
{
return new Regex(UrlExtractor, RegexOptions.IgnoreCase).Match(text);
}
以下是如何提取所有Href Url的方法。我正在我的一个项目中使用该正则表达式,您可以修改它以满足您的需要并重写它以匹配标题。我想将它们批量匹配更方便