如何从网页中提取网址?
的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);
,但它是一个不好的不安全实现。谢谢。
您可以用专用的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
谢谢@dmitryLedentsov ..我现在尝试 – Blendester
对不起,它没有'.SelectNodes'方法..我错过了一个using指令? – Blendester
@Blendester是的,你需要一个'使用HtmlAgilityPack;'行。你有没有通过Nuget安装它? –
对它使用正则表达式绝对是一个好主意。 用于前缀部分的第一个正则表达式,应该用空字符串替换,最后用相同的东西替换。
您需要使用\ <来跳过像<这样的字符,并使用正常的正则表达式语法来准确定义所需的内容。
使用正则表达式(正则表达式)。 – arminb
从不,从不从不使用正则表达式来解析网页。非常糟糕的建议。对从html中提取的子字符串使用正则表达式是可以的。你应该使用GetElementsByTagName(“link”),然后提取返回字符串的属性href。 – jdweng
也很关键:https://stackoverflow.com/a/1732454/2546433 –