当前位置:  开发笔记 > 编程语言 > 正文

使用C#解析HTML链接

如何解决《使用C#解析HTML链接》经验,为你挑选了2个好方法。

是否有一个内置的DLL将给我一个字符串链接列表.我想发送一个包含有效html的字符串,并解析所有链接.我似乎记得在.net或非托管库中内置了一些内容.

我找到了一些看起来很有前景的开源项目,但我认为有一个内置模块.如果不是,我可能不得不使用其中之一.如果没有必要的话,我现在不想要外部依赖.



1> Jacob Proffi..:

我不知道内置任何内容,从你的问题来看,你正在寻找的内容有点含糊不清.您想要整个锚标记,还是只需要href属性中的URL?

如果你有一个结构良好的XHtml,你可以使用XmlReader和XPath查询来找到所有的锚标签(),然后点击地址的href属性.由于这不太可能,你可能最好使用RegEx来拉下你想要的东西.

使用RegEx,您可以执行以下操作:

List findUris(string message)
{
    string anchorPattern = "]*?href[\\s]?=[\\s\\\"\']+(?.*?)[\\\"\\']+.*?>(?[^<]+|.*?)?<\\/a>";
    MatchCollection matches = Regex.Matches(message, anchorPattern, RegexOptions.IgnorePatternWhitespace | RegexOptions.IgnoreCase | RegexOptions.Multiline | RegexOptions.Compiled);
    if (matches.Count > 0)
    {
        List uris = new List();

        foreach (Match m in matches)
        {
            string url = m.Groups["url"].Value;
            Uri testUri = null;
            if (Uri.TryCreate(url, UriKind.RelativeOrAbsolute, out testUri))
            {
                uris.Add(testUri);
            }
        }
        return uris;
    }
    return null;
}

请注意,我想检查href,以确保该地址作为有效的Uri确实有意义.如果你实际上不想在任何地方追求链接,你可以消除它.



2> Brian Lyttle..:

我认为没有内置库,但Html Agility Pack非常适合您想要做的事情.

使用原始.NET框架并且没有外部依赖关系的方法将使用正则表达式来查找字符串中的所有"a"标记.你可能需要处理很多边缘情况.例如href =" http:// url "vs href = http:// url等

推荐阅读
大大炮
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有