Подтвердить что ты не робот

Получить все ссылки на странице html?

Я работаю над небольшим хобби-проектом. Я уже написал код, чтобы получить url, загрузить заголовок и вернуть тип/тип mime.

Тем не менее, шаг до этого - тот, который я застрял - мне нужно получить содержимое всех URL-адресов на странице, основанной внутри тега, и в кавычках, т.е.

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

Найдет ссылку favicon.

Есть ли что-нибудь полезное в библиотеке .net или это будет случай для регулярного выражения?

4b9b3361

Ответ 1

Я бы посмотрел, используя Html Agility Pack.

Вот пример прямо со страницы их примеров о том, как найти все ссылки на странице:

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

 }

Ответ 2

Вам нужно использовать HTML Agility Pack.

Например:

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

Ответ 3

В BCL нет ничего встроенного, но, к счастью, вы можете использовать HTML Agility Pack, чтобы выполнить эту задачу достаточно просто.

Что касается вашей конкретной проблемы, см. Легко извлекать ссылки из фрагмента html с помощью 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;
}