2014-10-30 82 views
0

我试图在Xpath的帮助下使用HTML Agilitypack从其他站点检索数据。我已经成功地从一个站点添加数据,但是当我更改URL和XPath以从其他站点检索数据时,它不起作用。使用XPath从其他站点检索数据

这是我工作的代码:

string Url = "http://www.uok.edu.pk/faculties/computerscience/bs.php"; 
HtmlAgilityPack.HtmlWeb web = new HtmlWeb();  
HtmlAgilityPack.HtmlDocument doc = web.Load(Url);  
var headers = doc.DocumentNode.SelectNodes(
"//*[@id=\"courses_sec\"]/div[2] /div[2]/div[2]/table[2]/tbody/tr[1]/td"); 

但我改变XPath和URL,变量headers为空。这是不正常的代码:

string Url = "http://music.dodear.com/index.php";  
HtmlAgilityPack.HtmlWeb web = new HtmlWeb();  
HtmlAgilityPack.HtmlDocument doc = web.Load(Url);  
var headers = doc.DocumentNode.SelectNodes(
"//*[@id=\"content\"]/div[2]/table/tbody/tr[2]/td/table/tbody/tr/td/ 
table[1]/tbody/tr/td");  
+2

如果你解释了*你想要检索的数据,这将有所帮助。更一般地说,不要让工具为你写XPath。你总是会得到一个丑陋的混乱,在网站结构稍有改变的情况下就会轻易破坏。自己写XPath。 – Tomalak 2014-10-30 19:10:20

+0

我想检索具有两列的那个列表,其中一列是大学名称(其中约64个名称存在),另一个列名称是位置。对于上述代码也是如此,但不适用于下面的代码。 – user34094881 2014-10-31 11:42:41

回答

0

无论是XPath是错误的,或者HTML有某种这可能需要一些复杂的XPath来访问坏格式(即不关闭标签等)。为什么不逐一分解XPath?例如,一旦你的web.Load(URL)加载到的HTMLDocument,你可以

doc.DocumentNode.SelectSingleNode("//*[@id=\"content\"]").InnerHtml; 

然后

doc.DocumentNode.SelectSingleNode("//*[@id=\"content\"]/div[2]").InnerHtml; 

然后

doc.DocumentNode.SelectSingleNode("//[@id=\"content\"]/div[2]/table").InnerHtml; 

等做了观看

所以你可以找出问题所在

+0

// [@ id = \“content \”]/div [2]“在这一点上,它给出了一些值,但是当我添加”/ table/...“时,它给出了null。Plz帮助这很难了解这里的实际问题 – user34094881 2014-10-31 16:50:08

+0

任何软件的存在,为我工作,以便我gaive url和Xpath,它给我的结果?????????? – user34094881 2014-10-31 18:31:12