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

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

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

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

Нашел бы ссылку favicon.

Действительно ли там что-нибудь полезно в библиотеке .NET, или это оказывается перед необходимостью быть случаем для regex?

40
задан maxp 11 February 2010 в 22:53
поделиться

3 ответа

Я бы посмотрел на Html Agility Pack .

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

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

 }
62
ответ дан 27 November 2019 в 01:08
поделиться

В 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;
}
16
ответ дан 27 November 2019 в 01:08
поделиться

Вам нужно использовать 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));
38
ответ дан 27 November 2019 в 01:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: