Решено: Как отпарсить HTML страницу на C#?

Приветствую всех, сегодня я покажу как можно с помощью регулярных выражений отпарсить HTML страницу и получить с нее все ссылки.

 WebRequest request;

            try
            {
                request = HttpWebRequest.Create("https://www.nookery.ru/");
            }catch (Exception)
            {
                MessageBox.Show("Ошибка загрузки страници");
                return;
            }
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            StreamReader reader = new StreamReader(response.GetResponseStream());
            StringBuilder pagebuilder = new StringBuilder();
            string line;
            while ((line=reader.ReadLine())!=null)
            {
                pagebuilder.AppendLine(line);
            }

            response.Close();
            reader.Close();

        //    richTextBox1.Text = pagebuilder.ToString();

           string link= pagebuilder.ToString();
            //парсинг начала


            //string pattern = @"href=""(<ссылка>\S+)"">";
            //Regex regul = new Regex(pattern);
            //var matches = regul.Matches(link);
            //foreach (Match m in matches)
            //{
            //    richTextBox1.Text += m.Groups["ссылка"]+Environment.NewLine;
            //}
        
            string pattern = @"href=""(?<ссылка>\S+)""";
            Regex regul = new Regex(pattern);
            var matches = regul.Matches(link);
            foreach (Match m in matches)
            {
                richTextBox1.Text += m.Groups["ссылка"] + Environment.NewLine;
            }


        }

Как видите код писался на WinForm использовался компонент richTextBox и button. Первая часть когда у нас делает запрос и по строчно считывает все строки страници. Однако я хочу заострить внимание именно на второй части кода, регулярном выражении.

     string pattern = @"href=""(?<ссылка>\S+)""";
            Regex regul = new Regex(pattern);
            var matches = regul.Matches(link);
            foreach (Match m in matches)
            {
                richTextBox1.Text += m.Groups["ссылка"] + Environment.NewLine;
            }

В самой первой строчке кода мы создали шаблон поиска, начало которого начинается с href=» далее у нас в круглых скобках идет внутри шаблонная переменная под названием ссылка там и будет находится наш найденный линк. После скобок идет символ на который должна заканчиваться строка, это может быть кавычка или > тут надо смотреть саму страницу. Далее мы получаем коллекцию всех найденных ссылок с сайта и поочередно в цикле переберем их.

К сожалению сам шаблон не универсален, потому я приложу еще пару вариаций его, без лишнего кода.

string pattern = @"href=""(<ссылка>\S+)"">";
string pattern = @"href='(?<link>\S+)'>";

Дело в том что сайты пишутся на разных движках и формирования ссылок на них происходит автоматически, потому приходиться немного корректировать шаблон, но в целом он универсален.

Таким образом мы смогли разобраться как отпарсить сайт и найти на нем ссылки и самое главное, что нам не пришлось использовать сторонние библиотеки, а лишь возможности C#.

Обновлено: 06.06.2018 — 17:10

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.