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

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

03.02.2020, 16:38. Показов 15770. Ответов 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
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
03.02.2020, 16:40
Цитата Сообщение от Arlividay Посмотреть сообщение
только начал изучать C# (3й день)
Не сильно замахнулись сразу сайты парсить?
Может имеет смысл сначала с азами разобраться?
Ну там, чем переменная от экземпляра объекта отличается, например.
1
1 / 1 / 0
Регистрация: 03.02.2020
Сообщений: 5
03.02.2020, 16:54  [ТС]
Я практикуюсь. И начал пока с калькулятора который мне нужен. Он по определённым параметрам выдаёт мне окончательную стоимость. Всё Гуд, но я хочу большего мне нужно что бы перед тем как он пересчитает данные спарсит актуальный курс валюты на текущий день и выдаст результат. Знаю что можно просто сделать графу куда вводить актуальный курс и оно будет работать, но мне нужно именно так. По этому без парсинга никак
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
03.02.2020, 16:58
Цитата Сообщение от Arlividay Посмотреть сообщение
мне нужно что бы перед тем как он пересчитает данные спарсит актуальный курс валюты на текущий день и выдаст результат.
В таком случае вам нужно не сайты парсить, а подключить нормальный API (пример), который будет предоставлять данные в удобоваримом формате.
0
1 / 1 / 0
Регистрация: 03.02.2020
Сообщений: 5
03.02.2020, 17:16  [ТС]
Уважаемый спасибо за ответ, но мне нужно именно конкретно то что я описал. Парсить именно с исходника сайта. Ибо это в дальнейшем мне понадобится для реализации моих идей где нет Api. Например авторизация где нет возможности авторизоваться по Api, но зато есть токен - который нужно будет сначала спарсить.
0
управление сложностью
 Аватар для Почтальон
1693 / 1306 / 259
Регистрация: 22.03.2015
Сообщений: 7,545
Записей в блоге: 5
04.02.2020, 08:18
Arlividay, начните с азов, не думаю что кто-то захочет объяснять основы C# и web`а
1
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18253 / 14178 / 5366
Регистрация: 17.03.2014
Сообщений: 28,863
Записей в блоге: 1
04.02.2020, 08:31
Лучший ответ Сообщение было отмечено Arlividay как решение

Решение

Arlividay, лови пример
C#
1
2
3
4
5
var config = Configuration.Default.WithDefaultLoader();
var address = "https://www.rfaq.ru/";
var document = await BrowsingContext.New(config).OpenAsync(address);
string text = document.QuerySelector("h3").Text();
Console.WriteLine(text);
Строка передаваемая в QuerySelector называется CSS selector.
1
1 / 1 / 0
Регистрация: 03.02.2020
Сообщений: 5
04.02.2020, 19:36  [ТС]
Цитата Сообщение от OwenGlendower Посмотреть сообщение
лови пример


Строка передаваемая в QuerySelector называется CSS selector.

Спасибо Большое Вам! Буду пробовать так более уже понятно. Значит я получается могу всё что угодно вытянуть обратившись к селектору элемента? То есть вместо просто h3 вписать сам селектор
Code
1
document.QuerySelector(" #content > h3:nth-child(2)").Text();
будет ли это верным решением?
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18253 / 14178 / 5366
Регистрация: 17.03.2014
Сообщений: 28,863
Записей в блоге: 1
05.02.2020, 00:14
Arlividay, в общем да, с одним ограничением. AngleSharp не выполняет JavaScript и значит добраться можно только до элементов которые есть в html коде страницы, но не до элементов создаваемых скриптами. Поэтому примеры взятые из JS могут и не заработать.
1
30 / 21 / 9
Регистрация: 22.11.2014
Сообщений: 129
05.02.2020, 01:30
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Arlividay, в общем да, с одним ограничением. AngleSharp не выполняет JavaScript и значит добраться можно только до элементов которые есть в html коде страницы, но не до элементов создаваемых скриптами. Поэтому примеры взятые из JS могут и не заработать.
а есть парсеры с поддержкой скриптов?
0
1152 / 860 / 263
Регистрация: 30.04.2009
Сообщений: 3,603
05.02.2020, 08:15
Selenium
0
1 / 1 / 0
Регистрация: 03.02.2020
Сообщений: 5
05.02.2020, 14:43  [ТС]
Цитата Сообщение от OwenGlendower Посмотреть сообщение
в общем да, с одним ограничением. AngleSharp не выполняет JavaScript и значит добраться можно только до элементов которые есть в html коде страницы, но не до элементов создаваемых скриптами. Поэтому примеры взятые из JS могут и не заработать.
Понял. Спасибо за развёрнутый ответ. Немного я конечно огорчен, что не получится вытащить элемент который создался скриптом. Придется копать дальше.
0
 Аватар для Титан_1
21 / 21 / 3
Регистрация: 24.05.2014
Сообщений: 1,063
16.01.2021, 02:30
Arlividay, в AngleSharp VS ругается на await, установил Selenium. Попытался запустить через ChromeDriver - нужно скачать ChromeDriver. Скачал, запустил – Only local connections are allowed.
Please see [url]https://chromedriver.chromium.org/security-considerations[/url] for suggestions on keeping ChromeDriver safe.
ChromeDriver was started successfully.
, а в VS исключение: OpenQA.Selenium.WebDriverException: "unknown error: cannot find Chrome binary"
И как это исправить?
0
 Аватар для Титан_1
21 / 21 / 3
Регистрация: 24.05.2014
Сообщений: 1,063
16.01.2021, 02:42
Понял, Selenium - это не просто библиотека, позволяющая забирать и работать с веб-содержимым. Selenium запускает браузер и работает с ним. Поэтому, браузер должен быть установлен.

На счёт AngleSharp – почему он ругается на Ваш код?
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,574
16.01.2021, 04:13
Цитата Сообщение от Титан_1 Посмотреть сообщение
почему он ругается на Ваш код?
Написано же что метод в котором используется await должен быть с модификатором async.
C#
1
2
3
4
async Method()
{
    await Something();
}
0
 Аватар для Титан_1
21 / 21 / 3
Регистрация: 24.05.2014
Сообщений: 1,063
16.01.2021, 04:29
Someone007, понял

Добавлено через 13 минут
Сделал так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
        static void Main()
        {
           getHTMLfile("https://www.userbenchmark.com/user/User?id=133116&tab=PBenchmarks", "test.html");
        }
    
        static public async Task<string> getResponseAS(string urlAddress)
        {
            var config = Configuration.Default.WithDefaultLoader();
            var document = await BrowsingContext.New(config).OpenAsync(urlAddress);
            string text = document.ToHtml();
            Console.WriteLine(text);
            return text;
        }
        public static async void getHTMLfile(string urlAdress, string filename)
        {
            File.WriteAllText(
                filename,
                await getResponseAS(urlAdress),
                System.Text.Encoding.UTF8
            );
        }
Никакого файла не создаётся, но и ошибок никаких нет. Почему?
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18253 / 14178 / 5366
Регистрация: 17.03.2014
Сообщений: 28,863
Записей в блоге: 1
16.01.2021, 08:52
Титан_1, нужно дождаться окончания работы метода getHTMLfile с помощью await.
C#
1
2
3
4
        static async Task Main()
        {
           await getHTMLfile("https://www.userbenchmark.com/user/User?id=133116&tab=PBenchmarks", "test.html");
        }
0
 Аватар для Титан_1
21 / 21 / 3
Регистрация: 24.05.2014
Сообщений: 1,063
16.01.2021, 15:30
OwenGlendower, "void is not awaitable".
Post Scriptum. Хм, сменю тогда возвращаемое значение getHTMLfile тоже на Task

Добавлено через 3 минуты
В HTML-файл вместо кода страницы записался
XML
1
2
3
4
5
<html><head>
    <meta http-equiv="Refresh" content="0; URL=/pages/global/pagegone.jsf">
</head>
<body>
</body></html>
Добавлено через 2 минуты
OwenGlendower, можно ли как-то преобразовать string к AngleSharp-овскому IDocument?

Добавлено через 20 минут
И без await-async в c# выдрать HTML из страницы нельзя? Это же мне всю программу под async-await переписывать ради одного только var document = await BrowsingContext.New(config).OpenAsync(urlAddress);
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18253 / 14178 / 5366
Регистрация: 17.03.2014
Сообщений: 28,863
Записей в блоге: 1
16.01.2021, 15:35
Цитата Сообщение от Титан_1 Посмотреть сообщение
"void is not awaitable".
Точно. Моя невнимательность. Нужно еще метод чтобы getHTMLfile возвращал Task
C#
1
2
3
4
5
6
7
8
public static async Task getHTMLfile(string urlAdress, string filename)
{
    File.WriteAllText(
        filename,
        await getResponseAS(urlAdress),
        System.Text.Encoding.UTF8
    );
}
Цитата Сообщение от Титан_1 Посмотреть сообщение
В HTML-файл вместо кода страницы записался
Никаких вместо. Это и есть код страницы.

Цитата Сообщение от Титан_1 Посмотреть сообщение
можно ли как-то преобразовать string к AngleSharp-овскому IDocument?
Можно, но не нужно. У вас уже есть document в методе getResponseAS. Работайте с ним.

Добавлено через 2 минуты
Цитата Сообщение от Титан_1 Посмотреть сообщение
И без await-async в c# выдрать HTML из страницы нельзя? Это же мне всю программу под async-await переписывать ради одного только
Можно. Как не покажу. Лучше сделайте правильно с использованием async/await.
0
 Аватар для Титан_1
21 / 21 / 3
Регистрация: 24.05.2014
Сообщений: 1,063
16.01.2021, 15:35
OwenGlendower, Это не код страницы. Код страницы я получаю, когда использую функцию, которую вы описали в этой теме, а код, выдаваемый AngleSharp'ом я могу только выкинуть в мусорку и сжечь
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.01.2021, 15:35
Помогаю со студенческими работами здесь

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 ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru