如何使用html敏捷包单独获取链接的标题和href值?

时间:2012-02-20 08:36:10

标签: c# .net html-agility-pack

我试图下载一个包含这样的表的页面

<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并在其中提取数据

任何帮助将不胜感激

此致

3 个答案:

答案 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的方法。我正在我的一个项目中使用该正则表达式,您可以修改它以满足您的需要并重写它以匹配标题。我想将它们批量匹配更方便