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