¿Cómo HtmlAgilityPack extrae texto de un nodo html cuyo atributo de clase se adjunta dinámicamente?

html-agility-pack

Pregunta

Queridos amigos, quiero extraer el texto å¹³å ‡3.6 星 de este segmento de código extraído de 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>

Mi pregunta es que el valor de la etiqueta de clase de intervalo "s_star_3_5 " varía según el nivel de calificación de diferentes clientes y se agrega de forma dinámica. Así que doc.DocumentNode.SelectSingleNode(" //span[@class='swSprite']").InnerText usar doc.DocumentNode.SelectSingleNode(" //span[@class='swSprite']").InnerText //span[@class='swSprite s_star_3_5 '] doc.DocumentNode.SelectSingleNode(" //span[@class='swSprite']").InnerText o //span[@class='swSprite s_star_3_5 '] , pero el resultado es un error o no mi querer

¿Alguna sugerencia?

Respuesta aceptada

En primer lugar, le sugiero que guarde el valor de doc.DocumentNode.OuterHtml en un archivo .html local y vea si el código que está obteniendo es ese código. El problema es que a veces empiezas a analizar un sitio web usando HtmlAgilityPack, pero el primer problema es que no estás obteniendo el HTML válido correctamente. Tal vez esté recibiendo un error 404, o una redirección, etc.

Estoy sugiriendo esto porque probé //span[@class='swSprite s_star_3_5 '] y //span[@class='swSprite s_star_3_5 '] correctamente.

Ese fue el problema en las siguientes preguntas:

Si eso no ayuda, publica el código HTML y te ayudaré;)


Respuesta popular

Esto funciona para mí:

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

y salidas

平均3.6 星

Nota que utilizo la función XPATH starts-with .



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué