如何在特定标题下的HTML中查找链接并解析它

时间:2016-11-27 02:29:30

标签: c# html linq html-agility-pack

我目前正在尝试根据上面的标题解析HTML文档中的链接,但无论我尝试什么,程序都无法找到它。 以下是我所使用的方法:

    public string findMajorURL(string collegeURL, string major)
    {
        HtmlDocument doc = new HtmlDocument();
        doc.LoadHtml(collegeURL);
        var root = doc.DocumentNode;
        var htmlNodes = root.Descendants();
        //Find html node containing the major heading
        foreach(HtmlNode node in htmlNodes)
        {
            if (node.InnerText == major)
            {
                HtmlNode target = node.NextSibling;
                List<string> links = target.Descendants("a").Select(a => a.Attributes["href"].Value).ToList();
                return links.First()+ "__IT WORKED__";
            }
        }
        return "Major not found";
    }

这就是我试图解析的HTML:

    <div style="padding-left: 20px">
       <h3 id="ent1629">Biological Sciences </h3>
       <a href="preview_entity.php?catoid=5&ent_oid=1629&returnto=818">Go to information for this department.</a>
       <br>
       <p>...</p>
       <div id="data_c_1629" style="display: none">...</div>
       <!--script language="javascript">hideshow(data_c_1630)</script-->

用户输入的主要内容应与生物科学标题相匹配。基于标题,我想在>下获得链接,在这种情况下是 preview_entity.php?catoid = 5&amp; ent_oid = 1629&amp; returnto = 818 < / p>

警告:我不能将XPath与我拥有的Visual Studio版本一起使用,因此我假设使用LINQ以某种方式将是最佳方式,但我再次不确定。

编辑事实证明,内部文字与专业不匹配,但是,我不知道这是怎么回事,因为我直接从html代码中取出。关于什么是错的任何想法?

1 个答案:

答案 0 :(得分:0)

根据发布的HTML代码段,node块内的if引用了<h3>元素,target引用了<h3>的下一个兄弟<a> }}。也就是说,您不需要target.Descendants("a")。只需直接从href获取target属性:

if (node.InnerText == major)
{
    HtmlNode target = node.NextSibling;
    return target.GetAttributeValue("href", "")+ "__IT WORKED__";
}