Я столкнулся с довольно странной проблемой. Это очень сложно объяснить, поэтому, пожалуйста, потерпите меня, но в основном вот краткое введение:
- Я новичок в асинхронном программировании, но не смог найти проблему в своем коде.
- Раньше я использовал HtmlAgilityPack, но никогда не использовал версию .NET 4.5.
- Это учебный проект, я не пытаюсь соскабливать или что-то в этом роде.
По сути, происходит следующее: я извлекаю страницу из Интернета, загружаю ее через поток в HtmlDocument
, затем извлекаю из нее определенные HtmlNodes
, используя выражения XPath
. Вот кусок упрощенного кода:
myStream = await httpClient.GetStreamAsync(string.Format("{0}{1}", SomeString, AnotherString);
using (myStream)
{
myDocument.Load(myStream);
}
HTML извлекается правильно, но HTML-коды HtmlNodes, извлеченные с помощью XPath, искажаются. Вот пример фрагмента HTML, который я получил в ответе, взятом из Fiddler:
<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
, который он извлекает с ранее показанной страницы:
<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>
Как видите, InnerText значительно изменился, как и URL. Очевидно, моя программа не работает, но я не знаю, как это сделать. Что может быть причиной этого? Это ошибка в HtmlAgilityPack? Пожалуйста, порекомендуйте! Спасибо за прочтение!
https://mobile.bet365.com/sport/splash/Default.aspx?Sport=2&key=2&L=1
, затем щелкните сегодняшние гонки, и выражение XPath —//div[@id='subMenu_2']//a
. Даже если выражение было неверным, оно не должно получить ничего или получить что-то другое, кроме того, что я хочу, получить не то, что я хочу, но с другим HTML. Может ли это быть ошибкой в HTMLAGILITYPACK? Можешь попробовать воспроизвести? 12.06.2014diff
ing вывода: некоторые из этих сайтов не любят, когда их очищают (угадайте, почему) и имеют некоторые контрмеры. Обработка неверных/поддельных данных для распознанных попыток очистки может быть одной из из тех. 12.06.2014