parser pagina otra leer hipervinculos hipervinculo hacer from enlace ejemplos content como c# asp.net

c# - pagina - Obtener todos los enlaces en la página html?



html parser c# (4)

¿Qué hay de Regex?

<(a|link).*?href=(/"|'')(.+?)(/"|'').*?>

con banderas IgnoreCase y SingleLine

Vea la demostración en systemtextregularexpressions.com regex.matches

Estoy trabajando en un pequeño proyecto de hobby. Ya he escrito el código para obtener una URL, descargo el encabezado y devuelvo el tipo de tipo / contenido de mimo.

Sin embargo, el paso anterior es el que yo prefiero: necesito recuperar el contenido de todas las URL en la página dentro de una etiqueta, y entre comillas, es decir,

... <link rel=''shortcut icon'' href="/static/favicon.ico" type="image/x-icon" /> ...

Encontraría el enlace de favicon.

¿Hay algo útil en la biblioteca .net o va a ser un caso para regex?


Debe usar HTML Agility Pack .

Por ejemplo:

var doc = new HtmlWeb().Load(url); var linkTags = doc.DocumentNode.Descendants("link"); var linkedPages = doc.DocumentNode.Descendants("a") .Select(a => a.GetAttributeValue("href", null)) .Where(u => !String.IsNullOrEmpty(u));


Me gustaría ver el uso del paquete Html Agility .

Aquí hay un ejemplo directamente de su página de ejemplos sobre cómo encontrar todos los enlaces en una página:

HtmlWeb hw = new HtmlWeb(); HtmlDocument doc = hw.Load(/* url */); foreach(HtmlNode link in doc.DocumentNode.SelectNodes("//a[@href]")) { }


No hay nada integrado en el BCL, pero afortunadamente puede usar el HTML Agility Pack para realizar esta tarea de manera bastante simple.

En cuanto a su problema específico, consulte Extracción fácil de enlaces de un fragmento de html con HtmlAgilityPack :

private List<string> ExtractAllAHrefTags(HtmlDocument htmlSnippet) { List<string> hrefTags = new List<string>(); foreach (HtmlNode link in htmlSnippet.DocumentNode.SelectNodes("//a[@href]")) { HtmlAttribute att = link.Attributes["href"]; hrefTags.Add(att.Value); } return hrefTags; }