Как найти ссылки на все страницы сайта ASP MVC

315
21 мая 2017, 20:19

Добрый вечер!
Проект ASP MVC.
Задача: есть адрес некого сайта в Интернете (в строковом виде). Нужно собрать ссылки на все страницы сайта.
В английской версии StackOverflow нашел способ с использованием WebClient.DownloadString. Но там задача получить весь HTML-код страницы. (на всякий случай ссылка: http://stackoverflow.com/questions/1820991/how-to-get-the-webpage-source-in-asp-net-c#1820991
Собственно вопрос: есть ли какой-то более прямой способ собрать ссылки на все страницы сайта, чем тянуть весь HTML-код страницы и парсить его через Regex?

Answer 1

Для парсинга сайтов в c# сейчас пользуются AngleSharp, очень хорошая библиотека, рекомендую.

Это гораздо правильнее, чем варварски парсить текст регулярками.

var parser = new HtmlParser();
var document = parser.Parse(@"<body>
<div class='product'>
    <a href='/url1.html'><img src='img1.jpg' alt=''></a>
    Hello, world
    <div class='comments-likes'>1</div>
</div>
<div class='footer'>
    <a href='http://www.ya.ru/q=asdf'>
</div>
</body>");
var links = document.QuerySelectorAll("a");
foreach (var link in links)
{
    var url = link.GetAttribute("href");
    url.Dump();
}

Вывод:

/url1.html

http://www.ya.ru/q=asdf

Можно и читать (в т.ч. через async/await) страницу:

private static IDocument GetPage(Url url)
{
    var config = Configuration.Default.WithDefaultLoader();
    var document = BrowsingContext.New(config).OpenAsync(url).Result;
    if (document.StatusCode != HttpStatusCode.OK)
        throw new Exception($"Bad document status: {document.StatusCode}");
    return document;
}
READ ALSO
Сортировка в переменном порядке [дубликат]

Сортировка в переменном порядке [дубликат]

На данный вопрос уже ответили:

258
Как проверить правильно ли введена дата?

Как проверить правильно ли введена дата?

Добрый день, задача следующая: В WinForms дан текстбокс в который должна вводиться дата в формате YYYY-MM-DD, как проверить что дата введена в правильном...

291
Как узнать путь к программе например calc.exe?

Как узнать путь к программе например calc.exe?

Например в cmd можно запустить написав calcexe

304