如何使用html agility pack从html文本中提取所有url

时间:2013-03-12 15:11:54

标签: c# html-agility-pack

我经常使用正则表达式从html文本数据中提取文件名,但我听说html敏捷包对于解析html数据很有用。如何使用html agility pack从html数据中提取所有url。任何人都可以用示例代码指导我。感谢。

这是我的代码示例,工作正常。

using System.Text.RegularExpressions;

private ArrayList GetFilesName(string Source)
{
    ArrayList arrayList = new ArrayList();
    Regex regex = new Regex("(?<=src=\")([^\"]+)(?=\")", 1);
    MatchCollection matchCollection = regex.Matches(Source);
    foreach (Match match in matchCollection)
    {
        if (!match.get_Value().StartsWith("http://"))
        {
                    arrayList.Add(Path.GetFileName(match.get_Value()));
                }
                match.NextMatch();
            }
            ArrayList arrayList1 = arrayList;
            return arrayList1;
        }

private string ReplaceSrc(string Source)
{
    Regex regex = new Regex("(?<=src=\")([^\"]+)(?=\")", 1);
    MatchCollection matchCollection = regex.Matches(Source);
    foreach (Match match in matchCollection)
    {
        string value = match.get_Value();
        string str = string.Concat("images/", Path.GetFileName(value));
        Source = Source.Replace(value, str);
        match.NextMatch();
    }
    string source = Source;
    return source;
}

2 个答案:

答案 0 :(得分:2)

类似的东西:

var doc = new HtmlDocument();
doc.LoadHtml(html);

var images = doc.DocumentNode.Descendants("img")
    .Where(i => i.GetAttributeValue("src", null) != null)
    .Select(i => i.Attributes["src"].Value);

这将选择文档中具有<img>属性集的所有src元素,并返回这些URL。

答案 1 :(得分:0)

选择具有非空img属性的所有src标记(否则在获取属性值时将获得 NullReferenceException ):

HtmlDocument html = new HtmlDocument();
html.Load(path_to_file);
var urls = html.DocumentNode.SelectNodes("//img[@src!='']")
               .Select(i => i.Attributes["src"].Value);