2010-10-21 260 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