2014-02-21 384 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