Возникла проблема при попытке извлечь ссылки из htmlnode с помощью htmlagiliypack.

Это продолжение моего предыдущего вопроса.

Я получил отличный код анализа ссылок отсюда .

Итак, у меня есть html следующего вида:

<html>
    <head>
        RANDOM JAVASCRIPT AND CSS AHHHHHH!!!!!!!!
    </head>
    <body>
        <a href="/Random/link/here">Random</a>
        <a href="/Random/link/here">Random</a>
        <a href="/Random/link/here">Random</a>
        <a href="/Random/link/here">Random</a>
        <a href="/Random/link/here">Random</a>
        <a href="/Random/link/here">Random</a>
        <table class="table">
            <tr><a href="/subdir/members/Name">Name</a></tr>
            <tr><a href="/subdir/members/Name">Name</a></tr>
            <tr><a href="/subdir/members/Name">Name</a></tr>
            <tr><a href="/subdir/members/Name">Name</a></tr>
            <tr><a href="/subdir/members/Name">Name</a></tr>
            <tr><a href="/subdir/members/Name">Name</a></tr>
            <tr><a href="/subdir/members/Name">Name</a></tr>
            <tr><a href="/subdir/members/Name">Name</a></tr>
            <tr><a href="/subdir/members/Name">Name</a></tr>
            <tr><a href="/subdir/members/Name">Name</a></tr>
        </table>
    <body>
</html>

И у меня есть следующий код, созданный с целью извлечения информации, содержащейся в , а затем извлечения ссылок на эту информацию:

public class MainClass
{
    public static void Main(String[] args)
    {
        string url = args[1];
        Extractinfo pageScrape = new Extractinfo();
        pageScrape.RenderPage(url);
    }
}
public class Extractinfo
{
    public HtmlDocument RenderPage(string url)
    {
        try
        {
                HtmlDocument pageSource = new HtmlDocument();
                var webGet = new HtmlWeb();
                pageSource = webGet.Load(url);

                ExtractLinks(pageSource);
        }
        catch (WebException e)
        {
            Console.WrtieLine(e.Message + ": " + e.StackTrace);
        }
    }

    private List<string> ExtractHrefTags(HtmlNode htmlSnippet)
        {
            List<string> hrefTags = new List<string>();

            foreach (HtmlNode link in htmlSnippet.SelectNodes("//a[@href]"))
            {
                HtmlAttribute att = link.Attributes["href"];
                hrefTags.Add(att.Value);
            }

            return hrefTags;
        }

        public void ExtractLinks(HtmlDocument pagesource)
        {

            var elements = pagesource.DocumentNode.SelectNodes("//table[@class='table']");
            List<string> hrefTags = new List<string>();
            foreach (var ele in elements)
            {
                 hrefTags = ExtractHrefTags(ele);
            }
        }
    }
}

Теперь, вместо получения только ссылок внутри <table class="table>*****</table>, этот код помещает все ссылки на странице в hreftags списка. Что я здесь делаю неправильно? Как я могу исправить ошибку, чтобы извлекались только те ссылки, которые находятся внутри <table class="table>*****</table>?

Спасибо за помощь!


person gfppaste    schedule 13.06.2012    source источник


Ответы (1)


Вам нужно добавить "." к вашему XPath, чтобы соответствовать дочерним узлам таблицы, например:

htmlSnippet.SelectNodes(".//a[@href]")
person shriek    schedule 13.06.2012
comment
Я чувствую себя полным идиотом... Я смотрел на это минут 30 и не мог понять. Благодарю вас! - person gfppaste; 13.06.2012