2013-01-07 77 views
-1

我製作了這個抓取工具,我想知道爲什麼我的代碼轉到下一頁不起作用。這裏是代碼。爲什麼爬蟲不去下一頁?

 var pessoaFinder = new ABCTelefonosPessoasLinkFinder(); 
     var pessoaContent = new ABCTelefonosPessoasContentFinder(); 
     var Urls = DadoPo.ListarUrls(); 


     foreach (var url in Urls) 
     { 
      var tempPessoas = new List<string>(); 
      tempPessoas.AddRange(pessoaFinder.Find(url)); 

      foreach (var linkPessoa in tempPessoas) 
      { 
       var infoPessoa = new List<DadoTo>(); 
       infoPessoa.AddRange(pessoaContent.Find(url + linkPessoa)); 


       foreach (var pessoa in infoPessoa) 
       { 
        if (DadoPo.VerificaLink(url + linkPessoa)) 
        { 
         continue; 
        } 
        DadoPo.Salvar(pessoa); 
       } 
      } 
     } 
    } 

這個調用函數調用函數找到鏈接,並轉到下一頁。這裏是查找人員信息並進入下一頁(我認爲錯誤是)的功能。

public string[] Find(string url) 
    { 
     var webGet = new HtmlWeb(); 
     var document = webGet.Load(url); 
     var nodes = document.DocumentNode.SelectNodes("//div[@id='mainContent']/div/a"); 

     if (nodes == null) 
     { 
      return new string[0]; 
     } 

     foreach (var node in nodes) 
     { 
      var href = node.GetAttributeValue("href", ""); 
      cidades.Add(href); 
     } 

     var elUrlProximaPagina = document.DocumentNode.SelectSingleNode("//div[@id='mainContent']/div[@class='paginado']/div/*[contains(@class,'previous')]"); 

     if (elUrlProximaPagina == null) 
     { 
      return cidades.ToArray(); 
     } 

     var urlProximaPagina = elUrlProximaPagina.GetAttributeValue("href", ""); 

     if (!String.IsNullOrEmpty(urlProximaPagina)) 
     { 
      return Find(urlProximaPagina); 
     } 
     return cidades.ToArray(); 
    } 
} 

請儘快回答。非常感謝你。

回答

1

一個可能的問題是,編寫SelectSingleNode("//blah")將導致每次從根節點搜索文檔,並且無論您開始從哪個節點開始搜索,它總會返回第一個匹配結果。這會導致您繼續選擇一個節點並重新抓取它。您應該使用.//語法來指定您從當前節點搜索:SelectSingleNode(".//blah")

所以,你的XPATH應該是:

document.DocumentNode.SelectSingleNode(".//div[@id='mainContent']/div[@class='paginado']/div/*[contains(@class,'previous')]"); 

您也可以修復所有其他XPath選擇在你的代碼,讓你從當前節點從根節點選擇,不是。

+0

謝謝您的回覆和關注! – Bovo