Usando htmlAgilityPack raspando todo el texto interno de la etiqueta

.net c# html-agility-pack web-scraping xpath

Pregunta

Quiero eliminar todas las palabras del enlace http://search.freefind.com/siteindex.html?id=59478474&ltr=10240&fwr=0&pid=i&ics=1 Probé algo como esto:

HtmlWeb web = new HtmlWeb();
HtmlAgilityPack.HtmlDocument doc = web.Load("http://search.freefind.com/siteindex.html?id=59478474&ltr=10240&fwr=0&pid=i&ics=1");
HtmlNodeCollection nodes = doc.DocumentNode.SelectNodes("//font[@class='search-index-font']//a");

if (nodes != null)
{

    foreach (HtmlNode n in nodes)
    {
         link = n.InnerText;
        my_link.Add(link);
        MessageBox.Show(link);
    }

}
else
    MessageBox.Show("no wordfound ");

Mi salida expexted debería gustar

a    
aa
aachhe
aagrashi
aagun
aaj
aam
aanka
aankhi
aar
aashman
abāddhō
abāddhōtā
abadh
..
..

¿Pero no funcionó? Muestra "ninguna palabra encontrada" significa que devuelve nulo. ¿Cómo puedo obtener todo el texto de la etiqueta <a> en ese caso? ¿Alguien me puede decir qué debería estar en SelectNodes ("")?

Respuesta aceptada

Debe buscar el siguiente nodo de texto después de la etiqueta <script> (no de la etiqueta <a> como usted dijo), dentro de <font class='search-index-font'> . Esta expresión xpath hará el truco:

//font[@class='search-index-font']/script/following-sibling::text()[1]

Y este código:

HtmlWeb web = new HtmlWeb();
HtmlAgilityPack.HtmlDocument doc = web.Load("http://search.freefind.com/siteindex.html?id=59478474&ltr=10240&fwr=0&pid=i&ics=1");
HtmlNodeCollection nodes = doc.DocumentNode.SelectNodes("//font[@class='search-index-font']/script/following-sibling::text()[1]");

devolverá los nodos de texto que necesita:

a
aa
aachhe
aagrashi
aagun
aaj
aam
aanka
aankhi
aar
...

Respuesta popular

HtmlWeb web = new HtmlWeb();
HtmlAgilityPack.HtmlDocument doc =
    web.Load("http://search.freefind.com/siteindex.html?id=59478474&ltr=10240&fwr=0&pid=i&ics=1");
HtmlNodeCollection nodes = doc.DocumentNode.SelectNodes("//font[@class='search-index-font']");
string link = string.Empty;
if (nodes != null)
{
    foreach (var item in nodes)
    {
        var value =
        item.Elements("script").ToList();
        foreach (var items in value)
        {
            link += items.NextSibling.InnerText+ "\n";
        }
    }
    MessageBox.Show(link);
}
else
    MessageBox.Show("no wordfound ");


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é