2012-02-16 123 views
1

我想從網站獲取數據。我正在使用HtmlAgilityPack(C#)。在網站內容是這樣的在HtmlAgilityPack,Xpath中使用謂詞

<div id="list"> 
    <div class="list1"> 
    <a href="example1.com" class="href1" >A1</a> 
    <a href="example4.com" class="href2" /> 
    </div> 
    <div class="list2"> 
    <a href="example2.com" class="href1" >A2</a> 
    <a href="example5.com" class="href2" /> 
    </div> 
    <div class="list3"> 
    <a href="example3.com" class="href1" >A3</a> 
    <a href="example6.com" class="href2" /> 
    </div> 
    <div class="list3"> 
    <a href="example4.com" class="href1" >A4</a> 
    <a href="example6.com" class="href2" /> 
    </div> 
    <div class="list3"> 
    <a href="example5.com" class="href1" >A5</a> 
    <a href="example6.com" class="href2" /> 
    </div><div class="list3"> 
    <a href="example6.com" class="href1" >A6</a> 
    <a href="example6.com" class="href2" /> 
    </div><div class="list3"> 
    <a href="example3.com" class="href1" >A7</a> 
    <a href="example6.com" class="href2" /> 
    </div> 
</div> 

在這裏,我們有7類鏈接class =「href1」。我只想抓取3個鏈接(從第3個鏈接到第5個鏈接)。如何獲取這些特定的鏈接?

回答

1

您的數據已經看起來是格式良好的XML。如果你正在解析XHTML頁面,那麼你可能會逃避.NET Framework的System.Xml類。例如,將數據加載到XElement,你可以使用:

XElement xElement = XElement.Parse(@" 
    <div id=""list""> 
     <div class=""list1""> 
      <a href=""example1.com"" class=""href1"" >A1</a> 
      <a href=""example4.com"" class=""href2"" /> 
     </div> 
     <div class=""list2""> 
      <a href=""example2.com"" class=""href1"" >A2</a> 
      <a href=""example5.com"" class=""href2"" /> 
     </div> 
     <div class=""list3""> 
      <a href=""example3.com"" class=""href1"" >A3</a> 
      <a href=""example6.com"" class=""href2"" /> 
     </div> 
     <div class=""list3""> 
      <a href=""example4.com"" class=""href1"" >A4</a> 
      <a href=""example6.com"" class=""href2"" /> 
     </div> 
     <div class=""list3""> 
      <a href=""example5.com"" class=""href1"" >A5</a> 
      <a href=""example6.com"" class=""href2"" /> 
     </div> 
     <div class=""list3""> 
      <a href=""example6.com"" class=""href1"" >A6</a> 
      <a href=""example6.com"" class=""href2"" /> 
     </div> 
     <div class=""list3""> 
      <a href=""example3.com"" class=""href1"" >A7</a> 
      <a href=""example6.com"" class=""href2"" /> 
     </div> 
    </div>"); 

然後,選擇第三至第五<a>元素,其class屬性有href1值,使用:

var links = xElement.XPathSelectElements("//a[@class='href1']").Skip(2).Take(3).ToList(); 

另一方面,如果您有HtmlAgilityPack.HtmlDocument實例,則可以使用以下命令執行XPath查詢:

HtmlNodeCollection links = htmlDoc.DocumentNode.SelectNodes("//a[@class='href1']"); 
var links3to5 = links.Cast<HtmlNode>().Skip(2).Take(3).ToList(); 
2

這種代碼:

HtmlDocument doc = new HtmlDocument(); 
    doc.Load(myHtmlFile); 
    foreach (HtmlNode node in doc.DocumentNode.SelectNodes(
     "//div[@class='list3' and position() > 2 and position() < 6]/a[@class='href1']")) 
    { 
     Console.WriteLine("node:" + node.InnerText); 
    } 

會給你這樣的結果:

node:A3 
node:A4 
node:A5 
+0

非常感謝你.. – 2012-02-16 20:25:24