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

139
17 марта 2019, 02:10

Я написал парсер с использованием AngleSharp.
Сайт для парсинга взят условно для теста.

Код

public async void Parser()
        {
            // *** HtmlLoader ***
            HttpClient client = new HttpClient();
            string currentUrl = "https://github.com/search?q=winform&type=Repositories";
            var response = await client.GetAsync(currentUrl);
             string source = await response.Content.ReadAsStringAsync(); // результат парсинга 

            // HTML парсер, который доступен из "AngleSharp".
            var domParser = new HtmlParser();
            // Парсим
            var document = await domParser.ParseAsync(source);

            // *** Парсинг ***
            // var items = document.QuerySelectorAll("a").Where(item =>
            //         item.ClassName != null && item.ClassName.Contains("post__title_link"));
            var fieldNameCollect = document.QuerySelectorAll("div.col-12.col-md-8.pr-md-3 > h3");
            var fieldDescriptCollect = document.QuerySelectorAll("div.col-12.col-md-8.pr-md-3 > p");            
            var fieldUpdateCollect = document.QuerySelectorAll("div > p > relative-time");            
            var fieldLangCollect = document.QuerySelectorAll("div.text-gray.flex-auto.min-width-0"); 
            var fieldStarCollect = document.QuerySelectorAll("div.pl-2.pl-md-0.text-right.flex-auto.min-width-0 > a");

            // Колличество
            int count = fieldNameCollect.Length;
            // Перебор элементов
            for (int i = 0; i < count; i++)
            {
                string fieldName = fieldNameCollect[i].TextContent;
                string fieldDescript = fieldDescriptCollect[i].TextContent;                
                string fieldUpdate = fieldUpdateCollect[i].TextContent;
                string fieldLang =  fieldLangCollect[i].TextContent;
                string fieldStar = fieldStarCollect[i].TextContent;
                ConnectDBAccess connectDBAccess = new ConnectDBAccess(tableName, pathDB);
                connectDBAccess.InsertRecord(fieldName, fieldDescript, fieldUpdate, fieldLang, fieldStar);
            }

У парсера есть проблемы:
1. Текст парсится с пробелами;
2. Некоторые части страницы не парсятся;

Вопросы.
1. Я получаю проблемы из-за неправильно подобранных селекторов?
2. Как устранить проблемы?
3. Правильно ли сделан парсер или можно его сделать более эффективным?

READ ALSO
Как сделать анимацию смены цвета фона у Button WPF C#?

Как сделать анимацию смены цвета фона у Button WPF C#?

Делаю приложение на WPF C#Хочу сделать для кнопки анимацию мерцания, через привязку к свойству

165
Поиск подстроки в строке &ldquo;от&rdquo; и &ldquo;до&rdquo; C# [закрыт]

Поиск подстроки в строке “от” и “до” C# [закрыт]

Например хочу найти строку начинающую на "лала," а заканчивающуюся на "ooo" Можно ли это как-то реализовать?

163
Xamarin и USB устройство

Xamarin и USB устройство

Возникла необходимость подключение сканера штрихкодов к телефону на AndroidПодключение сканера будет через USB порт

154
Фон не формы а панели

Фон не формы а панели

У меня есть форма, на ней панель, у этой панели есть определенный фонНа панели есть кнопка у которой в свойствах указан цвет фона - Transparent

211