Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
0 / 0 / 0
Регистрация: 30.06.2019
Сообщений: 14

Спарсить конкретные поля со страницы

30.06.2019, 04:25. Показов 2052. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, помогите пожалуйста разобраться, задача такая: Я вставляю ссылку на страницу в текстбокс и необходимо получить данные из конкретных полей этой страницы.
Подскажите какими библиотеками лучше это сделать, все что я пробовал, не сработало.
Я не хочу, чтобы все за меня сделали, но нужна помощь советом, какую библиотеку библиотеку использовать и самое главное, с чем собственно проблема, как правильно обратиться к нужным полям в предлагаемой библиотеке, я копировал xPath нужной графы, так и не получилось, выдавало исключение о том, что результат null, тут такая ситуация:
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[LEFT]
Нужный блок начинается с 
                                          <div id="tech" class="tab active">
                                                    ....
                                                                                <div class="clearfix"></div>
                                        </div><div class="prop-row">
                                        <div class="prop-title"><span>Рисунок </span></div>
                                        <div class="prop-value"><a href="/tex/plitka-pod-oboi">под обои</a> 
                                                                                </div>
                                            <div class="clearfix"></div>
                                        </div><div class="prop-row">
                                        <div class="prop-title"><span>Форма </span></div>
                                        <div class="prop-value"><a href="/forma/pryamougolnaya- 
   plitka">прямоугольная</a> </div>
                                            <div class="clearfix"></div>
                                        </div><div class="prop-row">
                                        <div class="prop-title"><span>Поверхность </span></div>
                                        <div class="prop-value"><a href="/plitka/glyancevaya- 
    plitka">глянцевая</a>
Нужно вынуть например "Рисунок" и "под обои" и тд. именно в этом блоке, какую библиотеку лучше использовать, какой метод и как правильно указать "путь" методу до нужного элемента, заранее всех благодарю.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
30.06.2019, 04:25
Ответы с готовыми решениями:

Из поиска Яндекса исчезают конкретные страницы
Здравствуйте, Коллеги! В последнее время заметил, что из поиска Яндекса полностью исчезают конкретные страницы моего проекта. Если...

Спарсить данные с HTML страницы
Имеется HTML страница, со следующими содержаниеми: &lt;table class=&quot;table table-hover&quot;&gt; &lt;thead&gt; ...

Спарсить со страницы данные о домене
Доброго времени суток, подскажите, как реализовать следующее проверяю домены на занятость. сервис отдает страничку, где домены вот в...

4
215 / 149 / 48
Регистрация: 28.12.2016
Сообщений: 716
30.06.2019, 09:26
loka-kola, как вариант распаршивать string

Из xnet
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
 public static string[] SubstringsOrEmpty(this string self, string left, string right,
            int startIndex = 0, StringComparison comparison = StringComparison.Ordinal, int limit = 0)
        {
            #region Проверка параметров
            if (string.IsNullOrEmpty(self))
                return new string[0];
 
            if (string.IsNullOrEmpty(left))
                throw new ArgumentNullException(nameof(left));
 
            if (string.IsNullOrEmpty(right))
                throw new ArgumentNullException(nameof(right));
 
            if (startIndex < 0 || startIndex >= self.Length)
                throw new ArgumentOutOfRangeException(nameof(startIndex), "Invalid start index");
            #endregion
 
            int currentStartIndex = startIndex;
            int current = limit;
            var strings = new List<string>();
 
            while (true)
            {
                if (limit > 0)
                {
                    --current;
                    if (current < 0)
                        break;
                }
 
                // Ищем начало позиции левой подстроки.
                int leftPosBegin = self.IndexOf(left, currentStartIndex, comparison);
                if (leftPosBegin == -1)
                    break;
 
                // Вычисляем конец позиции левой подстроки.
                int leftPosEnd = leftPosBegin + left.Length;
                // Ищем начало позиции правой строки.
                int rightPos = self.IndexOf(right, leftPosEnd, comparison);
                if (rightPos == -1)
                    break;
 
                // Вычисляем длину найденной подстроки.
                int length = rightPos - leftPosEnd;
                strings.Add(self.Substring(leftPosEnd, length));
                // Вычисляем конец позиции правой подстроки.
                currentStartIndex = rightPos + right.Length;
            }
            
            return strings.ToArray();
        }
использовать так

C#
1
2
3
4
5
 string html = ваш html;
           string[] temp = html .Substrings("<div class=\"prop-title\"><span>","</span>");
   // temp[0] = Рисунок 
   // temp[1] = Форма 
   // temp[2] = Поверхность
1
0 / 0 / 0
Регистрация: 30.06.2019
Сообщений: 14
30.06.2019, 13:25  [ТС]
Спасибо, но я хочу сделать через AngleSharp, сейчас сделал так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
        private async void FAtr()
        {
            var config = Configuration.Default.WithDefaultLoader();
            var address = textBox3.Text;
            var context = BrowsingContext.New(config);
            var document = await context.OpenAsync(address);
 
            var cellSelector = "< div class=\"prop-title\"><span>";  
            var cells = document.QuerySelectorAll(cellSelector);Выдает ошибку:AngleSharp.Dom.DomException: "The string did not match the expected pattern." проблема та же, я неправильно указываю "путь"
            var titles = cells.Select(m => m.TextContent);
            textBox4.Text = titles.ToString();
        }
 
        private void button2_Click(object sender, EventArgs e)
        {
            FAtr();
        }
0
1152 / 860 / 263
Регистрация: 30.04.2009
Сообщений: 3,603
30.06.2019, 14:02
Лучший ответ Сообщение было отмечено loka-kola как решение

Решение

loka-kola, QuerySelectorAll принимает не кусок текста из исходного html, а запрос в формате css selector.
Смотрите документацию/примеры css selector-ов.
Лично я предпочитаю XPath запросы. Вроде есть библиотека добавляюшая поддержку XPath в AngleSharp.
На XPath запрос будет выглядеть примерно так:
//div[class='prop-title']/span
1
0 / 0 / 0
Регистрация: 30.06.2019
Сообщений: 14
30.06.2019, 14:26  [ТС]
Спасибо всем, я не знаю почему я так тупил, но сделал так:
C#
1
2
3
4
5
6
7
           
            var config = Configuration.Default.WithDefaultLoader();
            var address = textBox3.Text;
            var context = BrowsingContext.New(config);
            var document = await context.OpenAsync(address);
            string Proizvod = document.Body.SelectSingleNode("//*[@id=\"tech\"]/div/div/div/div[1]/div[1]/div[1]/span/text()")?.TextContent;
            string Brend = document.Body.SelectSingleNode("//*[@id=\"tech\"]/div/div/div/div[1]/div[1]/div[2]/a")?.TextContent;
Наверное из-за того что не добавлял ?.TextContent;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.06.2019, 14:26
Помогаю со студенческими работами здесь

TXT файл спарсить на страницы
Есть книга в виде txt файла 157 уроков по 10-30 слов в каждом уроке, нужно каждый урок закинуть отдельный колонку в mysql базе чтобы каждый...

Как скопировать (спарсить) DOM страницы?
ИСПОЛЬЗУЕТСЯ: WebDriver, С#, Google chrome ВОПРОС 1. Как скопировать (спарсить) DOM страницы?

Спарсить подгружающиеся данные со страницы (grab)
Добрый день. Я, к сожалению, новичок в Python и вообще в Web. Задача - раз в какой-то период заходить на сайт, проходить аутентификацию,...

Как спарсить значение в с web страницы
Доброго времени суток. Есть страница ( клик ) , мне нужно спарсить последнюю цену ( самую верхнюю ) , например сейчас она 0.49 рублей. Мне...

Спарсить все используемые ресурсы страницы
И так задача: спарсить все используемые ресурсы страницы(!), а именно: img, css, js. Собственно казалось бы ничего сложного, но метод...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru