Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Как извлечь все ссылки сайта внутри каталога?


Автор: Samyrro054 26.10.2019, 17:10
Есть сайт 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);
                }
            }
        }
    }
}

Но как реализовать извлечение ссылок из каждой найденной до этого ссылки?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)