我正在尝试阅读当天的图片。我可以通过这样做获得页面的全文:
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的最佳方法是什么?
答案 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=\"", "\">");