Есть сайт rol-x.ru. Необходимо извлечь все внутренние ссылки внутри каталога "Объявления Житомир" Теоретически, допустим берём 1-ю ссылку https://rol-x.ru/categories.aspx?parent=1. Программа извлечёт все ссылки имеющиеся на странице, и далее нужно чтобы программа искала все внутренние ссылки внутри каждой до этого извлечённой ссылки, и так пока не закончатся ссылки внутри каталога "Объявления Житомир". Т.е. последней извлечённой ссылкой будет https://rol-x.ru/view_phone.aspx?phone=3207181. Для начала использую HtmlAgilityPack для извлечения всех ссылок со страницы.
Код | namespace WindowsFormsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } static string GetAbsoluteUrlString(string baseUrl, string url) { var uri = new Uri(url, UriKind.RelativeOrAbsolute); if (!uri.IsAbsoluteUri) uri = new Uri(new Uri(baseUrl), uri); return uri.ToString(); } public static List<string> ParseLinks(string urlToCrawl) { WebClient webClient = new WebClient(); byte[] data = webClient.DownloadData(urlToCrawl); string download = Encoding.ASCII.GetString(data); HashSet<string> list = new HashSet<string>(); var doc = new HtmlAgilityPack.HtmlDocument(); doc.LoadHtml(download); HtmlNodeCollection nodes = doc.DocumentNode.SelectNodes("//a[@href]"); foreach (var n in nodes) { string href = n.Attributes["href"].Value; list.Add(GetAbsoluteUrlString(urlToCrawl, href)); } return list.ToList(); } private void button1_Click(object sender, EventArgs e) { List<string> linksToVisit = ParseLinks("https://rol-x.ru/categories.aspx?parent=1"); using (var writer = new StreamWriter("C:/Reest.txt", append: true)) { foreach (var line in linksToVisit) { writer.Write(line); } } } } }
|
Но как реализовать извлечение ссылок из каждой найденной до этого ссылки? |