2014-02-21 165 views
1

我试图得到这个元素上没有找到表元素:此页面上// * [@ ID =“表匹配”] /表:http://www.oddsportal.com/matches/soccer/20140221/HTML解析器网页

我想获取包含匹配的表格。表格在“启动时间”选项卡下开始。我正在寻找的元素是'table class ='table-main'',它位于元素'div id =“table-matches”内部“style =”display:block;“'

我试过了HtmlAgilityPack在C#中的文档,我可以找到'div'元素,但它表示它没有任何子节点(应该有一个表子节点)。如果我尝试获取表格,结果为空。下面是代码:

var webGet = new HtmlWeb(); 
var document = webGet.Load("http://www.oddsportal.com/matches/soccer/20140221/"); 
var div = document.DocumentNode.SelectNodes("//div[@id='table-matches']"); 
var table = document.DocumentNode.SelectNodes("//*[@id='table-matches']/table"); 
var table2 = document.DocumentNode.SelectNodes("//table"); 

所以,DIV变量包含的div元素(但它没有子节点),表变量为空,甚至表2变量包含4个元素,但他们都不是所需的表。

我觉得HtmlAgilityPack存在问题,并试图用Python获取整个网页。所以我把整个HTML文档都放在一个文本文件中,并搜索了文本文件,我可以找到div元素,但它是空的。里面没有表格元素。这是为什么?为什么我可以在Chrome或Internet Explorer中看到table元素,但是当我下载html时,没有这样的元素?

这里是Python代码:

url = urllib.urlopen("http://www.oddsportal.com/matches/") 
document = url.read() 
htmlOddsPortal = open("htmlOddsPortal.txt", "w") 
htmlOddsPortal.write(document) 

下面是最终的文本文档中的元素:

<div id="table-matches"></div>     <!-- END PAGE BODY --> 

回答

0

正装表用JavaScript(可能使用AJAX),所以你不会得到它与webGet.Load()。您只能获得服务器返回的HTML响应。

如果您(在Chrome中)打开控制台(F12),单击设置并选中禁用JavaScript,然后刷新页面,您可以检查该选项。你会看到空白的内容。

我有同样的问题,但我在java工作,我用HTMLUnit来解决这个问题。可能有类似的C#工具,或者您可以检查HtmlAgilityPack是否能够进行异步调用或类似WebBrowser组件。

+0

谢谢你的回答。我最终在Windows窗体中使用WebBrowser。以下是未来参考的代码: webBrowser.Navigate(“http://www.oddsportal.com/matches/soccer/20140221/”); HtmlElementCollection elements = webBrowser.Document.GetElementsByTagName(“table”); – user2266310