HTML Agility Pack 2

3

我正在尝试爬取这个网站。以下的XPath表达式在FirePath firebug扩展程序中运行良好。

html/body/table/tbody/tr[3]/td

但是使用相同的xpath表达式,下面的代码却返回null:
 HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
 HtmlWeb web = new HtmlWeb();

 doc = web.Load("http://www.edb.gov.hk/templates/sch_list_print.asp?district=cw");
 var collection= doc.DocumentNode.SelectNodes("html/body/table/tbody/tr[3]/td");

有人能帮我解决这个问题吗?谢谢。

1个回答

3

这是可行的。查看您尝试抓取的页面源代码,其中在表格内没有。

HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
HtmlWeb web = new HtmlWeb();

doc = web.Load("http://www.edb.gov.hk/templates/sch_list_print.asp?district=cw");
var collection= doc.DocumentNode.SelectNodes("html/body/table/tr[3]/td");

将您的xpath更改为
html/body/table/tr[3]/td

哦,太好了,我使用的xpath是由Firepath生成的,实际上在HTML中没有tbody,有什么想法? - Burfi
当DOM加载时,它会自动“修复”,并且如果缺少tbody,则会出现问题。页面加载后DOM可能会发生很多事情,您始终需要查看原始源以查看实际存在的内容。如果解决了您的问题,请记得将答案标记为正确答案 :) - Christian Westman
使用敏捷包进行爬取工作的任何其他有用指针? - Burfi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接