如何从网页中提取网址?

问题描述:

的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文件的URL。我怎么才能得到它?

我尝试这样做:

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); 

,但它是一个不好的不安全实现。谢谢。

+0

使用正则表达式(正则表达式)。 – arminb

+2

从不,从不从不使用正则表达式来解析网页。非常糟糕的建议。对从html中提取的子字符串使用正则表达式是可以的。你应该使用GetElementsByTagName(“link”),然后提取返回字符串的属性href。 – jdweng

+2

也很关键:https://*.com/a/1732454/2546433 –

您可以用专用的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

+0

谢谢@dmitryLedentsov ..我现在尝试 – Blendester

+0

对不起,它没有'.SelectNodes'方法..我错过了一个using指令? – Blendester

+0

@Blendester是的,你需要一个'使用HtmlAgilityPack;'行。你有没有通过Nuget安装它? –

对它使用正则表达式绝对是一个好主意。 用于前缀部分的第一个正则表达式,应该用空字符串替换,最后用相同的东西替换。
您需要使用\ <来跳过像<这样的字符,并使用正常的正则表达式语法来准确定义所需的内容。