c# - leyendo HTML?
Frecuentes
Visto 11,955 veces
3
Estoy desarrollando un programa en C# y necesito ayuda. Estoy tratando de crear una matriz o una lista de elementos que se muestran en un sitio web determinado. Lo que intento hacer es leer el texto de anclaje y es href
. Entonces, por ejemplo, este es el HTML:
<div class="menu-1">
<div class="items">
<div class="minor">
<ul>
<li class="menu-item">
<a class="menu-link" title="Item-1" id="menu-item-1"
href="/es/?item=1">Item 1</a>
</li>
<li class="menu-item">
<a class="menu-link" title="Item-1" id="menu-item-2"
href="/es/?item=2">Item 2</a>
</li>
<li class="menu-item">
<a class="menu-link" title="Item-1" id="menu-item-3"
href="/es/?item=3">Item 3</a>
</li>
<li class="menu-item">
<a class="menu-link" title="Item-1" id="menu-item-4"
href="/es/?item=4">Item 4</a>
</li>
<li class="menu-item">
<a class="menu-link" title="Item-1" id="menu-item-5"
href="/es/?item=5">Item 5</a>
</li>
</ul>
</div>
</div>
</div>
Así que de ese HTML me gustaría leer esto:
string[,] array = {{"Item 1", "/?item=1"}, {"Item 2", "/?item=2"},
{"Item 3", "/?item=3"}, {"Item 4", "/?item=4"}, {"Item 5", "/?item=5"}};
El HTML es un ejemplo que había escrito, el sitio real no se ve así.
4 Respuestas
9
Como otros dijeron, HtmlAgilityPack es el mejor para el análisis de html, también asegúrese de descargar HAP Explorer del sitio de HtmlAgilityPack, utilícelo para probar sus selecciones, de todos modos, este comando SelectNode obtendrá todos los anclajes que tienen ID y comienza con el elemento del menú:
HtmlDocument doc = new HtmlDocument();
doc.Load(htmlFile);
var myNodes = doc.DocumentNode.SelectNodes("//a[starts-with(@id,'menu-item-')]");
foreach (HtmlNode node in myNodes)
{
Console.WriteLine(node.Id);
}
contestado el 22 de mayo de 12 a las 21:05
¿El explorador HAP? De dónde sacas eso ? - paul1923
2
Si el HTML es un XML válido, puede cargarlo usando el XmlDocument
class y luego acceda a las piezas que desee usando XPaths, o puede usar y XmlReader
como sugiere Adriano (un poco más de trabajo).
Si el HTML no es XML válido, sugeriría usar algunos analizadores de HTML existentes; consulte, por ejemplo este - Eso funcionó bien para nosotros.
contestado el 22 de mayo de 12 a las 21:05
1
También puedes utilizar la HTMLAgilidad paquetes
contestado el 22 de mayo de 12 a las 21:05
1
Creo que este caso es lo suficientemente simple como para usar una expresión regular, como <a.*title="([^"]*)".*href="([^"]*)"
:
string strRegex = @"<a.*title=""([^""]*)"".*href=""([^""]*)""";
RegexOptions myRegexOptions = RegexOptions.None;
Regex myRegex = new Regex(strRegex, myRegexOptions);
string strTargetString = ...;
foreach (Match myMatch in myRegex.Matches(strTargetString))
{
if (myMatch.Success)
{
// Use the groups matched
}
}
contestado el 22 de mayo de 12 a las 21:05
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas c# html parsing or haz tu propia pregunta.
¿Intentó echar un vistazo a la secuencia XmlTextReader? Atraparás todos los a y, además, es rápido incluso con un gran archivo XML. - Adriano Repetti
Echa un vistazo a HtmlAgilityPack - Austin Salonen