2010-10-21 149 views
2

我刚开始从网页上抓取基本文本,目前正在使用HTMLAgilityPack C#库。我有一些成功与关闭rivals.yahoo.com boxscores(体育是我的东西,为什么不刮一些有趣的东西?),但我卡在NHL的游戏摘要页面。我认为这是一个有趣的问题,所以我会在这里发布。故障排除.HTM文件

我测试的页面是: http://www.nhl.com/scores/htmlreports/20102011/GS020079.HTM

在乍看之下,似乎没有AJAX或东西弄乱基本刮刀基本的文本。然后我意识到我不能右键点击由于一些JavaScript,所以我解决这个问题。我右击Firefox和使用XPather得到了主队的XPath和我得到:

/html/body/table[@id='MainTable']/tbody/tr[1]/td/table[@id='StdHeader']/tbody/tr/td/table/tbody/tr/td[3]/table[@id='Home']/tbody/tr[3]/td 

当我试图抓住这个节点/内部文本,htmlagilitypack不会发现它。有没有人在页面的源代码中看到任何可能阻止我的奇怪东西?

我是新来的,仍然在学习人们如何阻止我刮,任何提示或技巧,很高兴赞赏!

p.s.我观察了有关机器人等的所有网站规则,但我注意到了这种奇怪的行为,并将其视为挑战。

+0

不错,谢谢关于XPather的提示,将不得不使用。 – 2010-10-21 03:38:20

+0

其他人可以去那个页面,并尝试获得主队(哥伦布在右上角)的xpath并粘贴在这里,所以我可以比较吗? – Saab 2010-10-21 03:40:31

回答

0

我认为,除非我的xpath知识堆错误(可能),问题是你的xpath表达式中的/ tbody节点。

当我做

string test = string.Empty; 
StreamReader sr = new StreamReader(@"C:\gs.htm"); 
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument(); 
doc.Load(sr); 
sr.Close(); 
sr = null; 
string xpath = @"//table[@id='Home']/tr[3]/td"; 
test = doc.DocumentNode.SelectSingleNode(xpath).InnerText; 

这工作正常..返回
“哥伦布蓝色JACKETSGame 5个主场比赛3”
我希望是你想要的字符串。

检查html我找不到/ tbody。

1

好吧,看来我的xpaths里面有tbody的。当我从xpath手动删除这些tbodys时,HTMLAgilityPack可以很好地处理它。

我仍然想知道为什么我得到无效的xpaths,但现在我已经回答了我的问题。

+0

可能与浏览器或xpather应用程序有关,我将检查它听起来有趣。 – 2010-10-21 03:59:33