使用HTMLAGILITY包提取具有特定属性的表行

时间:2010-06-06 02:12:51

标签: c# html parsing html-agility-pack

考虑这段代码:

<tr>
                                                <td valign=top class="tim_new"><a href="/stocks/company_info/pricechart.php?sc_did=MI42" class="tim_new">3M India</a></td>
                                                <td class="tim_new" valign=top><a href='/stocks/marketstats/indcomp.php?optex=NSE&indcode=Diversified' class=tim>Diversified</a></td>

我想使用HTMLAgility包编写一段代码,它会在第一行中提取链接。

    using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using HtmlAgilityPack;

namespace WebScraper
{
    class Program
    {
        static void Main(string[] args)
        {
            HtmlDocument doc = new HtmlDocument();
            doc.LoadHtml("http://theurl.com");
            try
            {
                var links = doc.DocumentNode.SelectNodes("//td[@class=\"tim_new\"]");

            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                Console.WriteLine(ex.StackTrace);
                Console.ReadKey();
            }

        }
    }
}

当我尝试在try块中插入foreach(var link in links)语句/循环时,会抛出运行时错误。

1 个答案:

答案 0 :(得分:1)

代码doc.LoadHtml("http://theurl.com");不起作用。 LoadHtml的参数应该是包含HTML的字符串,而不是URL。您必须先尝试获取HTML文档,然后再尝试解析它。

加载文档后,对于此特定示例,您可以使用:

IEnumerable<string> links = doc.DocumentNode
                               .SelectNodes("//a[@class='tim_new']")
                               .Select(n => n.Attributes["href"].Value);