Получить все ссылки на HTML-странице? - PullRequest
39 голосов
/ 12 февраля 2010

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

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

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

Найдет ссылку на фавикон.

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

Ответы [ 4 ]

60 голосов
/ 12 февраля 2010

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

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

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

 }
36 голосов
/ 12 февраля 2010

Вам необходимо использовать 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));
16 голосов
/ 12 февраля 2010

В 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;
}
7 голосов
/ 04 августа 2015

Как насчет Regex?

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

с флагами IgnoreCase и SingleLine

См. Демонстрацию на systemtextregularexpressions.com regex.matches

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...