如何从网页中提取网址?

时间:2017-06-06 14:08:26

标签: c# html-agility-pack

Twitter返回一个网页,其中包含以下几行:

<link rel="dns-prefetch" href="//video.twimg.com" />
<link rel="preload" as="script" crossorigin="anonymous" href="https://ma-0.twimg.com/twitter-assets/responsive-web/web/ltr/vendor.69f9ac19fa493004.js" />
<link rel="preload" as="script" crossorigin="anonymous" href="https://ma-0.twimg.com/twitter-assets/responsive-web/web/ltr/i18n/en.312d3f56908013c9.js" />
<link rel="preload" as="script" crossorigin="anonymous" href="https://ma-0.twimg.com/twitter-assets/responsive-web/web/ltr/main.da8c0a0fbf03fdac.js" />
<meta property="fb:app_id" content="2231777543" />

我需要包含main.*.js文件的网址。我怎么才能得到它?

我试过了:

var mainIndex = content.IndexOf("main.");
var startIndex = content.LastIndexOf("href=\"", mainIndex) + 6;
var endIndex = content.IndexOf(".js", startIndex) + 3;
var url = content.Substring(startIndex, endIndex - startIndex);

但这是一个糟糕的不安全实现。感谢。

2 个答案:

答案 0 :(得分:3)

您可以使用专用的HTML解析器执行此操作,例如Html Agility Pack

var text = "<link rel=\"dns-prefetch\" href=\"//vide.... />";
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(text);

var links = doc
    .DocumentNode
    .SelectNodes("//link")
    .Select(e=>e.Attributes["href"].Value);

links
    // here, you could parse and match the URL robustly
    .Where(href=>href.Contains("main"))
    // try it in LINQPad
    .Dump();

结果:https://ma-0.twimg.com/twitter-assets/responsive-web/web/ltr/main.da8c0a0fbf03fdac.js

答案 1 :(得分:-3)

使用正则表达式绝对是个好主意。 前缀部分的第一个正则表达式应该用空字符串替换,对于结尾也应该用相同的东西替换 你将需要逃脱像&lt;用\&lt;并使用正常的正则表达式语法来准确定义所需内容。