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

如何解析图像标记的HTML字符串以获取SRC信息?

如何解决《如何解析图像标记的HTML字符串以获取SRC信息?》经验,为你挑选了2个好方法。

目前我使用.Net WebBrowser.Document.Images()来做到这一点.它需要Webrowser加载文档.它很乱,占用资源.

根据这个问题, XPath优于正则表达式.

任何人都知道如何在C#中做到这一点?



1> mathieu..:

如果您的输入字符串是有效的XHTML,您可以将其视为xml,将其加载到xmldocument中,并执行XPath魔法:)但情况并非总是如此.

否则你可以尝试这个函数,它将返回来自HtmlSource的所有图像链接:

public List FetchLinksFromSource(string htmlSource)
{
    List links = new List();
    string regexImgSrc = @"]*?src\s*=\s*[""']?([^'"" >]+?)[ '""][^>]*?>";
    MatchCollection matchesImgSrc = Regex.Matches(htmlSource, regexImgSrc, RegexOptions.IgnoreCase | RegexOptions.Singleline);
    foreach (Match m in matchesImgSrc)
    {
        string href = m.Groups[1].Value;
        links.Add(new Uri(href));
    }
    return links;
}

你可以像这样使用它:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://www.example.com");
request.Credentials = System.Net.CredentialCache.DefaultCredentials;
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
if (response.StatusCode == HttpStatusCode.OK)
{
    using(StreamReader sr = new StreamReader(response.GetResponseStream()))
    {
        List links = FetchLinksFromSource(sr.ReadToEnd());
    }
}



2> Paul Mrozows..:

任何HTML解析的最大问题是"格式良好"的部分.你已经在那里看到了垃圾HTML - 它有多少真的很好?我需要做类似的事情 - 解析文档中的所有链接(在我的情况下)用重写的链接更新它们.我在CodePlex上找到了Html Agility Pack.它摇滚(并处理格式错误的HTML).

这是一个迭代文档中链接的片段:

HtmlDocument doc = new HtmlDocument();
doc.Load(@"C:\Sample.HTM");
HtmlNodeCollection linkNodes = doc.DocumentNode.SelectNodes("//a/@href");

Content match = null;

// Run only if there are links in the document.
if (linkNodes != null)
{
    foreach (HtmlNode linkNode in linkNodes)
    {
        HtmlAttribute attrib = linkNode.Attributes["href"];
        // Do whatever else you need here
    }
}

原博客文章


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