Obtenga enlaces con palabras específicas de un código HTML en C #

c# html-agility-pack regex

Pregunta

Estoy tratando de analizar un sitio web. Necesito algunos enlaces en el archivo HTML que contiene algunas palabras específicas. Sé cómo encontrar los atributos "href" pero no los necesito todos, ¿hay alguna forma de hacerlo? Por ejemplo, ¿puedo usar expresiones regulares en HtmlAgilityPack?

HtmlNode links = document.DocumentNode.SelectSingleNode("//*[@id='navigation']/div/ul");

foreach (HtmlNode urls in document.DocumentNode.SelectNodes("//a[@]"))
{
    this.dgvurl.Rows.Add(urls.Attributes["href"].Value);
}   

Estoy intentando esto para encontrar todos los enlaces en código HTML.

Respuesta aceptada

Si tienes un archivo HTML como este:

<div class="a">
    <a href="http://www.website.com/"></a>
    <a href="http://www.website.com/notfound"></a>
    <a href="http://www.website.com/theword"></a>
    <a href="http://www.website.com/sub/theword"></a>
    <a href="http://www.website.com/theword.html"></a>
    <a href="http://www.website.com/other"></a>
</div>

Y estás buscando por ejemplo las siguientes palabras: theword y other . Puede definir una expresión regular, luego usar LINQ para obtener los enlaces con un atributo href coincida con su expresión regular de la siguiente manera:

<div class="a">
    <a href="http://www.website.com/"></a>
    <a href="http://www.website.com/notfound"></a>
    <a href="http://www.website.com/theword"></a>
    <a href="http://www.website.com/sub/theword"></a>
    <a href="http://www.website.com/theword.html"></a>
    <a href="http://www.website.com/other"></a>
</div>

Tenga en cuenta que hay una palabra clave contains con XPATH, pero tendrá que duplicar la condición de cada palabra que busca:

<div class="a">
    <a href="http://www.website.com/"></a>
    <a href="http://www.website.com/notfound"></a>
    <a href="http://www.website.com/theword"></a>
    <a href="http://www.website.com/sub/theword"></a>
    <a href="http://www.website.com/theword.html"></a>
    <a href="http://www.website.com/other"></a>
</div>

También hay una palabra clave de matches para XPATH, desafortunadamente solo está disponible con XPATH 2.0 y HtmlAgilityPack usa XPATH 1.0. Con XPATH 2.0, podrías hacer algo como esto:

<div class="a">
    <a href="http://www.website.com/"></a>
    <a href="http://www.website.com/notfound"></a>
    <a href="http://www.website.com/theword"></a>
    <a href="http://www.website.com/sub/theword"></a>
    <a href="http://www.website.com/theword.html"></a>
    <a href="http://www.website.com/other"></a>
</div>

Respuesta popular

Encuentro esto y eso funciona para mí.

HtmlNode links = document.DocumentNode.SelectSingleNode("//*[@id='navigation']/div/ul");
    foreach (HtmlNode urls in document.DocumentNode.SelectNodes("//a[@]"))
        {
           var temp = catagory.Attributes["href"].Value;
           if (temp.Contains("some_word"))
              {
                dgv.Rows.Add(temp);
              }
        }



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é