在C#中,如何从我使用webproxy.load()得到的html页面中解析出一个url?

时间:2015-05-04 23:26:49

标签: c# html webproxy

我正在尝试阅读当天的图片。我可以通过这样做获得页面的全文:

        var todayDate = DateTime.Now.ToString("yyyy-MM-dd");
            var web = new HtmlWeb();
            web.UseCookies = true;
            var wp = new WebProxy("http://myproxy:8080");
            wp.UseDefaultCredentials = true;
            NetworkCredential nc = (NetworkCredential)CredentialCache.DefaultCredentials;
            HtmlDocument document = web.Load("http://www.dilbert.com/strips/comic/" + todayDate, "GET", wp, nc);

如果我查看文档的完整html,我会在页面上多次列出image,例如:

<meta property="og:image" content="http://assets.amuniversal.com/c2168fa0c45a0132d8f0005056a9545d"/>

或:

<meta name="twitter:image" content="http://assets.amuniversal.com/c2168fa0c45a0132d8f0005056a9545d">

  <img alt="Squirrel In The Large Hadron Collider - Dilbert by Scott Adams" class="img-responsive img-comic" height="280" src="http://assets.amuniversal.com/c2168fa0c45a0132d8f0005056a9545d" width="900" />

从这张图片中解析URl的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

您可以尝试使用HtmlAgilityPack或类似的库来解析响应HTML的结构,然后遍历解析器生成的DOM。

答案 1 :(得分:0)

如果要进行大量的dom操作,可以使用HtmlAgilityPack,但快速而肮脏的黑客只是使用内置的.Net C#字符串功能。

这是在没有IDE的情况下未经测试和编写的,但您可以尝试类似:

var urlStartText = "<meta property=\"og:image\" content=\""
var urlEndText = "\"/>";
var urlStartIndex = documentHtml.IndexOf(urlStartText)+urlStartText.Length;
var url = documentHtml.Substring(urlStartIndex, documentHtml.IndexOf(urlEndText, urlStartIndex) - urlStartIndex);

想法是找到围绕URL的html文本的开始和结束位置,然后只使用Substring来抓取它。您可以创建一个类似"GetStringInbetween(string startText, string endText)"的方法,以便它可以重复使用

修改 **这方面的一个例子变成了一个方法:

/// <summary>
/// Returns the text located between the start and end text within content
/// </summary>
public static string GetStringInBetween(string content, string start, string end)
{
    var startIndex = content.IndexOf(start) + start.Length;
    return content.Substring(startIndex, content.IndexOf(end, startIndex) - startIndex);
}


string url = GetStringInbetween(documentHtml, "<meta property=\"og:image\" content=\"", "\">");