c# Парсинг сайтов с использованием HttpClientHandler/HttpClient и библиотеки HtmlAgilityPack
HTML-код
- Опубликовано: 24 авг 2024
- Пошаговое руководство по созданию программы c# для парсинга данных из HTML в Visual Studio 2019 с использованием HttpClientHandler/HttpClient и библиотеки HtmlAgilityPack.
VK - public1...
FaceBook - / 358572395391013
Ссылка на Git github.com/ser... на Git github.com/ser...
Предлагайте темы для последующих роликов. Постараюсь выполнить ваш заказ :)
Отличный урок! по ходу просмотра появились вопросы... Можете дать ответы на вопросы новичка? не нашел ваших контактов оставлю свои на телеграм @Serjin_program
@@user-hc1lq6qf4l что за вопросы?
По отображению данных добавил ролик
ruclips.net/video/ZHyakMleitY/видео.html
Было бы полезно поработать с яндекс диском, резервное копирование и т.д.
HtmlAgilityPack.HtmlNode привет если вывожу только вот что то одно с сайта и вот такое вылазит что я мог пропустить. Хелпани плиз)
Отличное видео, спасибо!
Большое спасибо за туториал!
Как альтернатива HtmlAgilityPack, я бы предложил AngleSharp, у нее синтаксис дружелюбней:
var table = HtmlDocument.QuerySelectorAll("#cat-udt tr"); //вытащить все строки из таблицы id= #cat-udt
foreach (var currentLine in table) {
var name = currentLine.QuerySelector("td:first-child + td")?.TextContent ?? ""; //парсишь уже что тебе нужно в tr с помощью QuerySelector
}
Спасибо.
Удачи!
Здравствуйте, цикл для вывода таблиц не обрабатывается. Код в точности такой как у вас, но цикл foreach пропускается в методе Main.
Здравствуйте, все работает, но как изменить получения лист? Мне нужно вывести только первые значения из таблицы на сайте, но он выводит полностью таблицу, как бы я не менял сам лист и не пытался исправить, либо все ломается, либо не выводит данные, которые мне нужны
Спасибо за труды. Какие источники можете посоветовать для изучения сетевого программирования?
Сложно сказать, смотря что программировать
@@user-hn5km9bo2e asp приложения
@@johnny_bronxxx надеюсь, что это подойдёт
ruclips.net/video/QT2xK8z9cNk/видео.html
Можете код скинуть, пожалуйста?
Ссылка на Git в описании канала
Подскажите книги по парсингу c#
Не искал. Обычно методом тыка. Ну и поиск в нете.
А что делать если конструкция: … Далее Далее 26 200 ₽
если они сдедуют один за одним, то пишем в пути
".\\div[@class='product-price']\\div[@id='cost-by-impact']\\div[@class='product-price']"\\ и т.д.
Был бы шрифт чуть побольше
Спасибо автору за урок. У меня все работает, но есть маленькая неожиданность - у меня windows 10 на английском языке. Ну и видимо по этому, все русские буквы в виде ????????? знаков вопроса. Пытался в программке это как-то исправить типа: // string HTMLutf8 = Encoding.UTF8.GetString(Encoding.UTF8.GetBytes(html)); но все же что то я делаю не так. Please help me.
Если поставить breakpoint на 72 строке и посмотреть что в rez как на картинке?
joxi.ru/V2VpebyHkYkk5r
если там всё нормально (как и должно быть), то скорее всего сама консоль не поддерживает кирилицу, надо смотреть настройки виндовс. А в любой другой программе поддерживающей Unicode всё будет нормалёк :)
Сам HTML, котрый мы обрабатываем, уже в уникоде. Если посмотреть в переменную html -
@@user-hn5km9bo2e Все правильно, как и у вас. Но вот вопрос, а если у юзера стоит Windows Eng версии? Ну как у меня, что тогда делать? Я новичок и пока не знаю как это исправить, но предполагаю, что нужна проверка на каком компе выполняется прога. Ну и в зависимости от этого выставлять кодировку.
@@sergiydryl4389 Если Вы будете это выводить на форме или записывать в файл, то проблем не будет. Консоль - это только для того, чтобы по-быстрому показать результат. Для того чтобы настроить консоль надо настроить по инструкции, например, как тут
rpeshkov.net/blog/cyrillic-symbols-on-english-windows/
Необходимости в этом нет, но можете сделать
@@user-hn5km9bo2e Я сделал приложение WindowsFormApp добавит TextBox и туда бросаю данные из вашей проги и теперь шрифт Кириллица - всё Ок! Но это был вопрос немного не по теме. А вот вопрос как раз по теме: почему, когда я меняю ссылку на сайт www.flashscore.com.ua или ru.whoscored.com у меня сразу выдаёт ошибку? При этом я даже не пытаюсь ничего извлекать из страницы, я этот кусок кода просто закомментировал. Спасибо за ответы.
@@sergiydryl4389 это стандартная ошибка. Надо подключить протоколы посвежее :)
В методе Main() в самом начале
System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12;
Зачем нужны асинковые методы?
Для того, чтобы метод не тормозил текущий поток и вызывался в другом. Если об этом вопрос, то можно почитать тут habr.com/ru/post/470830/
спасибо за видео
я для себя выбрал библиотеку HtmlAgilityPack
m.ruclips.net/video/oJSj2kMCqDs/видео.html
Не видно. Слишком мелко
Простите. Возьмите код с Git
Ссылка в описании канала
Очень плохо слышно.
Скоро приедет микрофон заказанный, надеюсь поправит этот момент
Спасибо за ролик, но почему- то clnt.GetAsync(url).Result получает не весь HTML код страницы.
С какой страницы? Некоторые сайты работают на JavaScript и загружают содержимое страницы на лету
@@user-hn5km9bo2e Спасибо, уже разобрался, так и оказалось... Сделал парсер json с вашего видео.
@@user-hn5km9bo2e какие некоторые? Да сейчас большинство сайтов либо вообще SPA, либо львиная доля контента генерируется джаваскриптом. То есть в таких случаях NET бессилен? Ну если надо парсить результат, а не сами json респонсы от сервера?
@@phat80 встроенный браузер в помощь :)
Есть варианты со сторонними библиотеками, которые без визуализации эмулируют браузер и можно получить конечный HTML
Только надо понимать, что данные тоже откуда-то берутся. Можно порыть в HTML тупо поиском по какому-нить значению.
Или даю ещё наводку :)
Страница может создаваться незаметно скриптом внутри браузера, но как только пользователь применяет фильтр (типа по дате или др.параметрам), то страница ломится за данными на сервак за JSON. Вот тут и ловим :)