我遇到了一個相當奇怪的問題。這是很難解釋,請忍耐一下,但基本上這裏是一個簡要的介紹:使用Async,HtmlAgilityPack和XPath解析
- 我是新來的異步編程,但在我的代碼
- 我以前用過HtmlAgilityPack無法找到一個問題,但從來沒有.NET 4.5版本。
- 這是一個學習項目,我不想刮或任何類似的東西。
基本上,正在發生的事情是這樣的:我從互聯網上檢索頁面,通過流加載到一個HtmlDocument
,然後使用XPath
表達它檢索某些HtmlNodes
。這裏是一塊簡化代碼:
myStream = await httpClient.GetStreamAsync(string.Format("{0}{1}", SomeString, AnotherString);
using (myStream)
{
myDocument.Load(myStream);
}
的HTML被正確retreived,但通過XPath的萃取HtmlNodes得到他們HTML錯位。這裏是HTML的一個樣片,我從小提琴手所採取的迴應了:
<div id="menu">
<div id="splash">
<div id="menuItem_1" class="ScreenTitle" >Horse Racing</div>
<div id="menuItem_2" class="Title" >Wednesday Racing</div>
<div id="subMenu_2">
<div id="menuItem_3" class="Level2" >» <a href="../coupon/?ptid=4020&key=2-70-70-22361707-2-20181217-0-0-1-0-0-4020-0-36200255-1-0-0-0-0">21.51 Britannia Way</a></div>
<div id="menuItem_4" class="Level2" >» <a href="../coupon/?ptid=4020&key=2-70-70-22361710-2-20181217-0-0-1-0-0-4020-0-36200258-1-0-0-0-0">21.54 Britannia Way</a></div>
<div id="menuItem_5" class="Level2" >» <a href="../coupon/?ptid=4020&key=2-70-70-22361713-2-20181217-0-0-1-0-0-4020-0-36200261-1-0-0-0-0">21.57 Britannia Way</a></div>
<div id="menuItem_6" class="Level2" >» <a href="../coupon/?ptid=4020&key=2-70-70-22361716-2-20181217-0-0-1-0-0-4020-0-36200264-1-0-0-0-0">22.00 Britannia Way</a></div>
<div id="menuItem_7" class="Level2" >» <a href="../coupon/?ptid=4020&key=2-70-70-22361719-2-20181217-0-0-1-0-0-4020-0-36200267-1-0-0-0-0">22.03 Britannia Way</a></div>
<div id="menuItem_8" class="Level2" >» <a href="../coupon/?ptid=4020&key=2-70-70-22361722-2-20181217-0-0-1-0-0-4020-0-36200270-1-0-0-0-0">22.06 Britannia Way</a></div>
</div>
</div>
</div>
我使用的XPath是100%正確的,因爲它工作在同一個頁面上的瀏覽器,但這裏有一個例子a
標籤,它是從先前顯示頁retreiving:
<a href="./coupon/?ptid=4020&key=2-70-70-22361710-2-20181217-0-0-1-0-0-4020-0-36200258-1-0-0-0-0"">1.54 Britannia Way</</a>
這裏是我複製從上面簡單的原文:
<a href="../coupon/?ptid=4020&key=2-70-70-22361710-2-20181217-0-0-1-0-0-4020-0-36200258-1-0-0-0-0">21.54 Britannia Way</a></div>
正如你可以發ee,InnerText發生了很大的變化,URL也有所變化。顯然我的程序不起作用,但我不知道如何。什麼會導致這種情況?它是HtmlAgilityPack中的錯誤嗎?請指教!謝謝閱讀!
嗨,感謝您的評論,但該網站並未使用AJAX加載數據。我上面顯示的HTML是我從響應中獲得的原始HTML,並且您可以看到由XPath表達式檢索到的HTML被損壞(某些數據丟失或添加)。 – TheGateKeeper
如果您不提供所有相關信息:頁面URL,XPath表達式,我們無法進一步幫助您。無法複製的問題通常不會得到解決。 –
URL是'https://mobile.bet365.com/sport/splash/Default.aspx?Sport = 2&key = 2&L = 1',然後點擊今天的比賽,XPath表達式是// // div [@id = 'subMenu_2'] // A'。即使表達不正確,它也不應該得到任何東西或獲得除我想要的之外的東西,不會得到我想要的東西,但使用不同的HTML。這可能是HTMLAGILITYPACK中的一個錯誤嗎?你可以嘗試重現它嗎? – TheGateKeeper