C# 如何在HTML中找到某个标题下的链接并对其进行解析

C# 如何在HTML中找到某个标题下的链接并对其进行解析,c#,html,linq,html-agility-pack,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;

我目前正试图根据上面的标题解析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";
    }
公共字符串findMajorURL(字符串集合URL,字符串主要)
{
HtmlDocument doc=新的HtmlDocument();
doc.LoadHtml(collegeURL);
var root=doc.DocumentNode;
var htmlNodes=root.subjects();
//查找包含主标题的html节点
foreach(htmlNodes中的HtmlNode节点)
{
if(node.InnerText==主)
{
HtmlNode target=node.NextSibling;
List links=target.substands(“a”).Select(a=>a.Attributes[“href”].Value.ToList();
返回links.First()+“_它工作了”;
}
}
返回“未找到主要的”;
}
这就是我试图解析的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\u entity.php?catoid=5&ent\u oid=1629&returnto=818

警告:我不能在现有的Visual Studio版本中使用XPath,因此我假设以某种方式使用LINQ将是最好的方法,但我还是不确定


编辑结果是内部文本与专业不匹配,但是,我不认为这是可能的,因为我直接从html代码中获取了它。有什么问题吗?

根据发布的HTML代码片段,如果
块引用
元素和
目标
引用
的下一个兄弟节点,即
。也就是说,您不需要执行
target.subjections(“a”)
。只需直接从
target
获取
href
属性:

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

根据发布的HTML代码片段,
节点
if
中引用了
元素,而
目标
引用了
的下一个兄弟节点,即
。也就是说,您不需要执行
target.subjections(“a”)
。只需直接从
target
获取
href
属性:

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

我尝试了这个,但显然它甚至没有输入if语句:/I我不明白为什么内部文本不匹配,因为我甚至直接从html文档中获取了内部文本,但它仍然不匹配。我尝试了这个,但显然它甚至没有输入if语句:/I我不明白为什么内部文本不匹配,因为我甚至直接从html文档中获取了内部文本,但它仍然不匹配。