Как HtmlAgilityPack извлекает текст из узла html, атрибут класса которого динамически добавляется - PullRequest
1 голос
/ 28 мая 2011

Дорогие друзья, я хочу извлечь текст 平均3.6 星 из этого сегмента кода, взятого из amazon.cn.

<div class="content"><ul>
<li><b>用户评分:</b>
<span class="crAvgStars" style="white-space:no-wrap;">
<span class="asinReviewsSummary" ref="dp_db_cm_cr_acr_pop_" name="B004GUSIKO">
<a>
  <span class="swSprite s_star_3_5 " title="平均3.6 星">
  <span>平均3.6 星</span>
  </span>
</a>

Мой вопрос: значение тега класса span "s_star_3_5 " зависит от уровня рейтинга другого клиента идобавляется динамически.Поэтому я пытаюсь использовать doc.DocumentNode.SelectSingleNode(" //span[@class='swSprite']").InnerText или //span[@class='swSprite s_star_3_5 '], но в результате получается ошибка или не то, что я хочу!

Есть предложения?

Ответы [ 2 ]

2 голосов
/ 31 мая 2011

Прежде всего, я предлагаю вам сохранить значение doc.DocumentNode.OuterHtml в локальном файле .html и посмотреть, является ли полученный вами код этим кодом.Дело в том, что иногда вы начинаете анализировать веб-сайт с помощью HtmlAgilityPack, но самая первая проблема заключается в том, что вы не получаете правильный HTML-код правильно.Возможно, вы получаете ошибку 404, или перенаправление и т. Д.

Я предлагаю это, потому что я протестировал //span[@class='swSprite s_star_3_5 '] и работал правильно.

Это было проблемой в следующих вопросах:

Если это не поможет, опубликуйте HTML-код, и я вам помогу;)

1 голос
/ 31 мая 2011

Это работает для меня:

HtmlDocument doc = new HtmlDocument();
doc.Load(myHtml);
HtmlNode node = doc.DocumentNode.SelectSingleNode("//span[starts-with(@class, 'swSprite')]");
Console.WriteLine("Text=" + node.InnerText.Trim());

и выходы

平均3.6 星

Примечание. Я использую XPATH , запускается с функцией .

...