Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.68/75: Рейтинг темы: голосов - 75, средняя оценка - 4.68
1 / 1 / 0
Регистрация: 03.02.2020
Сообщений: 5

Как работает AngleSharp?

03.02.2020, 16:38. Показов 16120. Ответов 35
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток друзья! Я совсем новенький только начал изучать C# (3й день). Мне нужно понять на примере как с помощью библиотеки AngleSharp парсить данные с сайтов, (курсы валют, прогнозы, новости итд).
Помогите пожалуйста покажите мне на примере (как этот код выглядеть будет) как спарсить с помощью AngleSharp к примеру с сайта https://www.rfaq.ru/ спарсить одну строку которая заключена в теги <h3></h3> в данном случае это слово Главная и результат то что спарсило вывести в консоль.

Покажите пожалуйста пример, как это реализовать
1
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.02.2020, 16:38
Ответы с готовыми решениями:

Как парсить страницу на AngleSharp?
Мне нужно распарсить данную страницу с помощью AngleSharp. Почитав скудную документацию на гитхабе написал следующее: static...

Как подключить библиотеку AngleSharp?
Уважаемые, задам совсем нубский вопрос. Появился интерес попытаться попарсить сайты, для чего решил использовать библиотеку AngleSharp, а...

Как вывести все данные из выборки с использованием AngleSharp?
Я имею html код страницы, использую такой запрос как вывести данные в консоль? var div =...

35
 Аватар для Lexeq
1151 / 743 / 483
Регистрация: 21.01.2014
Сообщений: 1,903
16.01.2021, 15:40
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Титан_1 Посмотреть сообщение
Это не код страницы
Скорее всего вас сервер посылает из-за пустого User-Agent'a.
0
 Аватар для Титан_1
21 / 21 / 3
Регистрация: 24.05.2014
Сообщений: 1,063
16.01.2021, 15:42
Lexeq, точно. А как его заполнить в AS?
И покажите, пожалуйста, как делать без await-async
0
 Аватар для Lexeq
1151 / 743 / 483
Регистрация: 21.01.2014
Сообщений: 1,903
16.01.2021, 15:46
Титан_1,
C#
1
2
3
4
5
6
7
8
9
        static public async Task<string> getResponseAS(string urlAddress)
        {
            var requester = new DefaultHttpRequester("Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:69.0) Gecko/20100101 Firefox/69.0");
            var config = Configuration.Default.WithDefaultLoader().With(requester);
            var document = await BrowsingContext.New(config).OpenAsync(urlAddress);
            string text = document.ToHtml();
            Console.WriteLine(text);
            return text;
        }

Не по теме:


Лучше все таки начните изучение с базовых вещей, методом тыка много не напрограммируешь

1
 Аватар для Титан_1
21 / 21 / 3
Регистрация: 24.05.2014
Сообщений: 1,063
16.01.2021, 17:55
Хм, а как с помощью AngleSharp вытянуть содержимое атрибутов (или как там они называются)? Например, вытянуть "https://link" из link? <a href="https://link" </a>
0
 Аватар для Lexeq
1151 / 743 / 483
Регистрация: 21.01.2014
Сообщений: 1,903
16.01.2021, 19:10
Титан_1,
C#
1
2
3
            var element = document.QuerySelector<IHtmlAnchorElement>("selector");
            var attr = element.Attributes["href"].Value; //вернет значение атрибута href
            var link = element.Href; //вернет абсолютную ссылку, если в атрибуте относительная
1
 Аватар для Титан_1
21 / 21 / 3
Регистрация: 24.05.2014
Сообщений: 1,063
16.01.2021, 19:17
Lexeq, IDocument.GetAttribute("href"); и IHtmlAnchorElement.Attributes["href"].Value равноценны или это совершенно разные функции? Что делает GetAttribute("href")?
0
 Аватар для Титан_1
21 / 21 / 3
Регистрация: 24.05.2014
Сообщений: 1,063
21.01.2021, 02:26
Мне кажется, я как-то неправильно понимаю метод "Filter"
вот пример кода:
C#
1
2
var table = HTML.QuerySelector(".table>tbody");
var rows = table.QuerySelectorAll<IHtmlAnchorElement>("tr").Filter("td>div>input[value*=\"LT\"]");
и он возвращает пустую коллекцию. Если зайти на эту же страницу и в консоли вбить
JavaScript
1
document.querySelector(".table>tbody").querySelectorAll("tr>td>div>input[value*=\"LT\"]")
то консоль выдаёт то, что нужно. Как правильно пользоваться методом Filter в AngleSharp?
0
Жесток & Наивен
 Аватар для sanec38
483 / 188 / 91
Регистрация: 02.02.2017
Сообщений: 427
21.01.2021, 04:26
Также можно посмотреть в сторону пример. Один из примеров безголового веб-браузера (headless-browser).
2
 Аватар для Титан_1
21 / 21 / 3
Регистрация: 24.05.2014
Сообщений: 1,063
23.01.2021, 00:09
Спасибо, но вопрос насчёт Filter ещё актуален
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18317 / 14243 / 5369
Регистрация: 17.03.2014
Сообщений: 28,908
Записей в блоге: 1
23.01.2021, 00:40
Цитата Сообщение от Титан_1 Посмотреть сообщение
вот пример кода:
C#
1
2
var table = HTML.QuerySelector(".table>tbody");
var rows = table.QuerySelectorAll<IHtmlAnchorElement>("tr").Filter("td>div>input[value*=\"LT\"]");
и он возвращает пустую коллекцию.
Тут так и хочется сказать "вот странный пример кода".

QuerySelectorAll<IHtmlAnchorElement>("tr") - здесь мы по идее хотим получить все элементы tr внутри таблицы, но в качестве типа элемента зачем-то указан IHtmlAnchorElement. То есть элемент <a>. По идее нужно использовать IHtmlTableRowElement.

.Filter("td>div>input[value*="LT"]") - включаем здравый смысл. Мы получили список строк, и фильтруем их по селектору который начинается с td. Сколько элементов подойдет под этот селектор? Правильно - ноль. Зачем тут Filter вообще неясно. Если в JS у вас вызывается querySelector, а затем querySelectorAll, то что мешало также написать в C#? Не приходило в голову что методы AngleSharp специально названы также как в JS чтобы облегчить миграцию?
C#
1
var rows = HTML.QuerySelector(".table>tbody").QuerySelectorAll("tr>td>div>input[value*=\"LT\"]");
0
 Аватар для Титан_1
21 / 21 / 3
Регистрация: 24.05.2014
Сообщений: 1,063
23.01.2021, 16:49
OwenGlendower, в JS я только проверял существует ли такие элементы. Как там реализуется Filter я не совсем понимаю, поэтому использовал обычный querySelector. Задача другая: нужно выбрать все tr, где td>div>input[value*="LT"] – выбрать именно tr, а не импуты

Добавлено через 4 минуты
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Мы получили список строк, и фильтруем их по селектору который начинается с td. Сколько элементов подойдет под этот селектор? Правильно - ноль.
С чего бы это? Для примера откройте эту страницу, в ней td спокойно сидит внутри tr
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18317 / 14243 / 5369
Регистрация: 17.03.2014
Сообщений: 28,908
Записей в блоге: 1
23.01.2021, 21:15
Цитата Сообщение от Титан_1 Посмотреть сообщение
С чего бы это? Для примера откройте эту страницу, в ней td спокойно сидит внутри tr
Речь о другом. Элемент соответствующий селектору tr не может одновременно соответствовать селектору td>div>input[value*="LT"]
0
 Аватар для Титан_1
21 / 21 / 3
Регистрация: 24.05.2014
Сообщений: 1,063
23.01.2021, 22:10
OwenGlendower, не понимаю. Каким методом я смогу выбрать все tr, внутри которых содержатся td>div>input[value*="LT"]?
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18317 / 14243 / 5369
Регистрация: 17.03.2014
Сообщений: 28,908
Записей в блоге: 1
23.01.2021, 22:51
Титан_1, в JavaScript как бы вы это сделали?
0
 Аватар для Титан_1
21 / 21 / 3
Регистрация: 24.05.2014
Сообщений: 1,063
24.01.2021, 15:33
OwenGlendower,
JavaScript
1
[...document.querySelector(".table>tbody").querySelectorAll("tr")].filter((tr) => tr.querySelector('td>div>input[value*="PC"]'));
Добавлено через 6 минут
Я, конечно, могу сделать так:
C#
1
HTML.QuerySelector(".table>tbody").QuerySelectorAll("tr>td>div>input[value*=\"PC\"]")
а потом многочисленные .ParentElement в цикле
но это не очень красиво в функциональном смысле

Добавлено через 1 час 34 минуты
Хм, в принципе, для моих целей будет достаточно
C#
1
2
var rows = HTML.QuerySelector(".table>tbody").QuerySelectorAll("tr>td>div>input[value*=\"PC\"]");
IElement row = rows.Last().ParentElement.ParentElement.ParentElement;
Но если знаете как преобразовать JS-код, приведённый в сообщении выше, то, пожалуйста, напишите.
0
 Аватар для Титан_1
21 / 21 / 3
Регистрация: 24.05.2014
Сообщений: 1,063
25.01.2021, 00:10
Хм. Почему, если дать одну и ту же ссылку браузеру и AngleSharp'у с UserAgent браузера, то HTML разный? Как этого избежать?

Добавлено через 3 минуты
Вероятно, виноват
C#
1
var document = await BrowsingContext.New(config).OpenAsync(urlAddress);
Как изменить эту строчку, чтобы получать такой же HTML, как в браузере?

Добавлено через 22 минуты
Хм, а вот в Tor'е HTML аналогичный. Интересно, от чего это зависит и как сделать HTML как в Chromium/Firefox

Добавлено через 26 минут
Хм. после чистке кеша, в Firefox с отключенным JS HTML превратился в такой же. Значит, причина в нём. А это, в свою очередь, значит, что "более полный" HTML без безголовых браузеров не получить
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.01.2021, 00:10
Помогаю со студенческими работами здесь

AngleSharp and JS
Доброго времени суток. Делаю парсер с использованием AngleSharp. Столкнулся с проблемой, что не могу распарсить элементы, которые...

Авторизация на AngleSharp
Не получается авторизоваться, не могу понять где ошибка? Как парсить уже полученную страницу после авторизации? Вроде бы записываю в input,...

Парсинг на AngleSharp
Здравствуйте уважаемые господа. Имеется вот такой html &quot;кодец&quot;: &lt;div id=&quot;29259&quot; class=&quot; pull-left m-5 bg-silver-lighter...

Парсинг через AngleSharp
пытаюсь обратиться к тегу div что не так? пишу недавно на C# точной информации не могу найти по библиотеки AngleSharp var...

AngleSharp имя Нода
Собственно получаю Нод, но не могу разобраться как получить его имя (Name) Добавлено через 9 минут Интересующий кусок html ...


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

Или воспользуйтесь поиском по форуму:
36
Ответ Создать тему
Новые блоги и статьи
Debian 13: Установка Lazarus QT5
ВитГо 09.05.2026
Эта инструкция моя компиляция инструкций volvo https:/ / www. cyberforum. ru/ blogs/ 203668/ 10753. html и его же старой инструкции по установке Lazarus с gtk2. . .
Нейросеть на алгоритме "эстафета хвоста" как перспектива.
Hrethgir 06.05.2026
На десерт, когда запущу сервер. Статья тут https:/ / habr. com/ ru/ articles/ 1030914/ . Автор я сам, нейросеть только помогает в вопросах которые мне не известны - не знаю людей которые знали-бы. . .
Асинхронный приём данных из COM-порта
Argus19 01.05.2026
Асинхронный приём данных из COM-порта Купил на aliexpress термопринтер QR701. Он оказался странным. Поключил к Arduino Nano. Был очень удивлён. Наотрез отказывается печатать русские буквы. Чтобы. . .
попытка написать игровой сервер на C++
pyirrlicht 29.04.2026
попытка написать игровой сервер на плюсах с открытым бесконечным миром. возможно получится прикрутить интерпретатор питон для кастомизации игровой логики. что есть на текущий момент:. . .
Контроль уникальности выбранного документа-основания при изменении реквизита
Maks 28.04.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРемонтСпецтехники", разработанного в КА2. Задача: уведомлять пользователя, если указанная заявка (документ-основание). . .
Благородство как наказание
Maks 24.04.2026
У хорошего человека отношения с женщинами всегда складываются трудно. А я человек хороший. Заявляю без тени смущения, потому что гордиться тут нечем. От хорошего человека ждут соответствующего. . .
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru