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