Html Agility Pack - 如何选择正确的span类

时间:2012-04-10 20:43:34

标签: c# html-agility-pack

我正试图在亚马逊网页上找到最低价格。我们以此网址为例:

http://www.amazon.com/s/ref=nb_sb_noss?url=search-alias%3Daps&field-keywords=9963BB#/ref=nb_sb_noss?url=search-alias%3Daps&field-keywords=E999-4701&rh=i%3Aaps%2Ck%3AE999-4701

我想找到最低价格......“新来的”右边的数字。

以下是我的尝试:

        using (TextWriter tw = new StreamWriter(@"D:\AmazonUrls.txt"))
        {
            foreach (string item in list)
            {
                var webGet = new HtmlWeb();
                var document = webGet.Load(item);
                var lowestPrice = document.DocumentNode.SelectSingleNode("//span[@id='subPrice']");
                if (lowestPrice != null)
                {
                    Console.WriteLine(lowestPrice);                
                }

            }           
        }

我没有得到任何结果。我哪里错了?

1 个答案:

答案 0 :(得分:5)

您要求的节点具有id的subPrice,但实际上class具有subPrice:

<span class="subPrice">
        <a href="http://www.amazon.com/gp/offer-listing/B001BA0W06/ref=sr_1_6_olp?ie=UTF8&qid=1334090832&sr=8-6&condition=new">5 new</a>
    from <span class="price">$245.90</span></span>

所以,

var lowestPrice = document.DocumentNode.SelectSingleNode("//span[@class='subPrice']");

应该得到你想要的东西。但是,您提供的示例页面有几个与该模式匹配的节点,因此您需要选择多个节点然后遍历它们以确定哪个节点具有最低权限。