Спасибо, хоть ролик и идет 20 минут, но я потратил на его просмотр около 4 дней вникая в интерфейсы, обобщения и прочее, узнал много полезного вообщем)
Крутяк! Давно хотел научиться парсить сайты и тут на этот урок наткнулся. Всё понятно объясняешь, красиво кодишь и шутеички в меру. Снимаю шляпу, качаю проект.
Сразу не запустилось. Нужно обновить AngleSharp и перед отправкой запроса в строке var response = await client.GetAsync(currentUrl); выполнить ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;
Может раньше и работало, но сейчас в классе HtmlLoader нужно в строке url = $"{settings.BaseUrl}/{settings.Prefix}/"; убрать один слеш между скобок. Вот так - url = $"{settings.BaseUrl}{settings.Prefix}/"; Иначе будет парсить на одной странице.
я конечно не эксперт да и видео уже попахивает "актуальной" информацией но на моменте 6:34 разве не лучше ли было использовать Select, (и выбрать нужное свойство вместо того чтобы всё в лист через цикл записывать), а потом сразу же вызвать метод ToArray(), или это такой High Level стёб который слишком крут для меня ?
что то пошло не так в Parser Worker в вызове метода //// короче var htmlparser = new HtmlParser(); var doc = await htmlparser.ParseDocumentAsync(нет ParseAsync() (( чем его заменить ))(source.ToString(),System.Threading.CancellationToken.None); var result =Parser.Parse(doc);
у меня при создании экземпляра HtmlParser падает, пишет: "Additional information: Не удалось загрузить файл или сборку "System.Text.Encoding.CodePages, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" либо одну из их зависимостей. Не удается найти указанный файл." Хотя я воспользовался подсказкой и все красные подчеркивания убрались. Нагуглил что то про добавление в конфиг этого: но не помогло, ошибок нет, но падает
Привет! Помнишь давным давно, вы писали парсер proxy?(Кто помнит и видел ставьте лайк ;)) Так вот, не мог бы ты запилить видосик про proxy checker. Выручи плиз)). P.S. Я думаю в тему "C# - Туториалы" норм будет!
В конце, когда делаешь форму, невозможно что-то успеть разглядеть, если не жать постоянно паузу и не отматывать назад много раз. Так ведь придется еще раз смотреть этот отрывок после создания формы, чтобы послушать твою речь. Найс...
Как сделать чтобы отлавливал теги которые находятся в теге ? Он тупо не видит все что внутри этого тега , хотя то, что внутри так же подходит под параметры. Вот пример: Моя строка в классе "HabraParser" : var items = document.QuerySelectorAll("span").Where(x => x.ClassName != null && x.ClassName.Contains("q")); А вот кусок HTML кода, в котором есть строка, которая подходит под параметры выборки: .... Оглушает цель на 5 сек.. Действует только на замороженных противников. ....
Но парсер не индексирует то, что находится в теге (в остальном все работает). Как заставить его индексировать внутри ? Не хочется брать целиком весь и регулярными выражениями выбирать все это.
Привет, тут все просто, грубо говоря, если необходимо дожидаться выполнения асинхронного метода через await, то делаем его тип Task, если не нужно - то не делаем, в нашем контексте этот метод просто работает в фоне, и информирует о завершении с помощью события, так что тип Task тут не используется
спасибо, как раз что нужно для моего говно-парсера с моими копирайтами задумка та же, но придется еще научить открывать его страницы и жмакать на кнопки внутри них
учус щас с++ и с# мне интересно если данные с сайта можно получить только с авторизацией как програмно сделать это? или нужен АПИ? мб есть у кого информация
Поделитесь пожалуйста Где можно почитать описание библиотеки "AngleSharp" для парсера и в видео вы говорили что есть где то код на исходник но я его не нашел . С уважением IVI.
Хотел на основе этого кода забацать парсер lostfilm, который просто выводит названия из списка сериалов в listbox, но столкнулся с проблемой. Из-за того, что контент на странице генерируется динамически парсятся только первые 10 строк. Вот ролик о том как это делать, мне бы очень пригодился
посмотри тут: stackoverflow.com/questions/24130650/scraping-data-dynamically-generated-by-javascript-in-html-document-using-c-sharp или попробуй Selenium. Посмотри ещё CefSharp
Понимаю, что видос старинный, но! Парсер должен быть универсальным. Пользователь должен только ввести адресс страницы, а затем уже вибирать, что с этой страницы ему надо просто просмотреть , какую-то ссылку скопировать, что -то скачать, преобразовать страницу или запустить свой скрипт на ней. Парсер также должен быть удобен в плане работы с диском ПК. И боже упаси использовать Form... слишком старая технология. Хотя-бы WPF.
Да не так уж и сложно, цикл Worker'а переделать на while, счетчик вынести в поле и синхронизовать увеличение lock'ом, в методе Start запускать нужное количество раз при помощи Task.Run, только в UI надо тоже при помощи инвоков синхронизовать вывод элементов
Спасибо за видео! Есть вопрос, если мне нужно вытянуть УРЛы изображений со всего, не с одной страницы а со всего сайта, это возможно? Можете помочь? УРЛ изображения находится здесь:
Не надо делать интерфейсы на всё подряд. Зачем они настройкам? Вы не собираетесь их мокать, вам не нужно их переопределять. А уж тем более нельзя чтобы настройки как то по разному генерили поля. То есть настройки это обычный картеж данных передаваемых в процедуру / класс и тд. Они должны быть константы в сути своей.
Ну я захочу переопределить, помокать и даже по разному генерить поля. Идёт расчёт на то, что тот, кто просмотрел видос, сможет допилить ручонками требуемый функционал.
Это короткий аналог вот такой конструкции if(OnSomething != null) { OnSomething(this); } P.S. Это делегат, а не событие. У делегатов есть метод Invoke, который по сути аналогичным образом вызывает метод по ссылке, оператор ? проверяет равен ли делегат OnSomething null'у, если там есть что либо, то вызывается метод Invoke со следующими аргументами
Спасибо, как ни странно, я большинство понял и вообще заебись представляешь пособие (интересно). А если серьезно, то через WebSockets как-то проще это делать, не очень понимаю зачем велосипед изобретать)
Что делать если даже не устанавливается? Install-Package AngleSharp Install-Package : Совпадения для указанных условий поиска и имени пакета "AngleSharp" не найдены. Чтобы просмотреть все доступные зарегистрированные источники пакетов, исполь зуйте командлет Get-PackageSource. строка:1 знак:1 + Install-Package AngleSharp + ~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : ObjectNotFound: (Microsoft.Power....InstallPackage:InstallPackage) [Install-Package], Exception + FullyQualifiedErrorId : NoMatchFoundForCriteria,Microsoft.PowerShell.PackageManagement.Cmdlets.InstallPackage
Слушай, мне нужно сделать которая будет сравнивать файл на сайте с файлом на компе, т.е. проверять обновление файла. если он обновился, то заменить старую версию. может подскажешь чего или видос запилишь?
string str1="any text"; string str2="any text"; bool equal=(str1==str2);//True bool equal1 = str1.Equals(str2);//True str2="another text"; equal=(str1==str2);//False equal1 = str1.Equals(str2);//False по идеи у класса String есть перегрузка оператора ==, которая неявно выполняет метод Equals, но я могу ошибаться
"Скоро эта сраная студия будет кодить за нас". Я бы сказазал даже больше. Студия будет не только говнокодить за вас, но и, если судить по этому видео, проекты автоматически ей сгенерированные будут менее "мусорными" чем написанные вами вручную.
Мне нужно получить названия заголовков видео уроков, у меня тоже тег а, но нету свойства class, только href, а ты принимаешь заголовки с помощью class'a, можно ли использовать href вместо class?
Спасибо, хоть ролик и идет 20 минут, но я потратил на его просмотр около 4 дней вникая в интерфейсы, обобщения и прочее, узнал много полезного вообщем)
Черт, я чувствую себя умным! Я понимаю, что тут происходит! Продолжай выпускать такие простые ролики))
Большое тебе спасибо за видео.
Это моё первое видео, которое я смотрю на твоём канале, и оно очень сильно меня радует. Обязательно подписываюсь! :)
Крутяк! Давно хотел научиться парсить сайты и тут на этот урок наткнулся. Всё понятно объясняешь, красиво кодишь и шутеички в меру. Снимаю шляпу, качаю проект.
Сразу не запустилось. Нужно обновить AngleSharp и перед отправкой запроса в строке var response = await client.GetAsync(currentUrl); выполнить ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;
В идеале бы @ExtremeCode мой пулл реквест принял - там всё готово уже.
Дядечка айПро , респект тебе от английского комьюнити и уважение от пацанов , помог
Может раньше и работало, но сейчас в классе HtmlLoader нужно в строке url = $"{settings.BaseUrl}/{settings.Prefix}/"; убрать один слеш между скобок. Вот так - url = $"{settings.BaseUrl}{settings.Prefix}/"; Иначе будет парсить на одной странице.
У HtmlParser уже нет такого метода ParseAsync, теперь он называется ParseDocumentAsync
Благодарю дружище помог)
HttpParser не находит, не знаешь в чем проблема?
Чувак ты самый лучший!!!! Удачи тебе во всем!
То чувство когда начинаешь понимать что такое интерфейсы, как их реализовывают ...
вау,вот это оперативно только бахнул вопрос. на трансляции про парсер и вуаля) класс спасибо!Лайк жирнющий!
Было бы шикарно увидеть этот парсер, но в обертке MVC/MVP или MVVM)
Фу фу фу за WF. Кодинг с юмором мне заходит. Лайк, подписка
Парни, респект. Отличный видос. С удовольствием повторил, многому научился.
я конечно не эксперт да и видео уже попахивает "актуальной" информацией но на моменте 6:34 разве не лучше ли было использовать Select, (и выбрать нужное свойство вместо того чтобы всё в лист через цикл записывать), а потом сразу же вызвать метод ToArray(), или это такой High Level стёб который слишком крут для меня ?
Ты просто лучший!)
После тяжелого рабочего дня твои видосики словно бальзам!)
И вот уже почти 2020 год, а второй части так и нет(( за слова не отвечаешь ска!!!(тип агро)
А он разве говорил за вторую часть?
@@AzizjanAyupov_leo говорил 23:41
@@ВладиславЗамікула и правда!
Как же ты классно это записал, лайк тебе за креативность и полезность информации. Спасибо
Спасибо за видео, давно его ждал.
Отличный канал!
Молодец, шо тут сказать, юмор прикольный)
Сделал на .net core 3.1 буква в букву, всё отлично работает.
Спасибо, хорошая работа парень!
что то пошло не так в Parser Worker в вызове метода //// короче var htmlparser = new HtmlParser();
var doc = await htmlparser.ParseDocumentAsync(нет ParseAsync() (( чем его заменить ))(source.ToString(),System.Threading.CancellationToken.None);
var result =Parser.Parse(doc);
помог. очень помог. не знаю, почему другие с такой же проблемой не столкнулись
так пакеты обновляются постоянно, методы изменяются, тут либо использовать старую версию как у автора или читать документацию
у меня при создании экземпляра HtmlParser падает, пишет:
"Additional information: Не удалось загрузить файл или сборку "System.Text.Encoding.CodePages, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" либо одну из их зависимостей. Не удается найти указанный файл."
Хотя я воспользовался подсказкой и все красные подчеркивания убрались.
Нагуглил что то про добавление в конфиг этого:
но не помогло, ошибок нет, но падает
До конца еще не досмотрел но вот комментарии автора просто чумовые! )
Ждем вторую часть)
а я использую Selenium для этих целях. Парсить через CSS либо XPath. Удобно, когда надо парсить защищенного текста.
братик, спасиб от души душевно в душу
+лайк +подписка
Мудрено, но понятно) Лукас!
Вот никуя не понятно, но один х интересно смотреть
))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
А я понял только после самостоятельного прочтения на GitHub)
А вообще спасибо за видео, хороший пример наглядного использования интерефейсов да еще и обобщенных
Ну вот опять. Видео 24 минуты идёт, а делаешь всё 2-3 часа, ибо надо загуглить все непонятные моменты.
ска, а их много ;)
Спосибо тебе, дядюшка IPro
Пиздатый код. Пиздатое ооп. Пиздатый парсер
Кажется я не туда полез, мне сюда ещё рано(
Ну ви іздіваєтися, превратили один маленький клас, в цілий проект!
iPro, большое спасибо. Продолжай!
Повторил за автором, 5 лет дали о себе знать, 20 ошибок....
удивительно как человек предсказал это событие: 4:10
Нихуя не понял, но очень интересно!
Привет! Помнишь давным давно, вы писали парсер proxy?(Кто помнит и видел ставьте лайк ;)) Так вот, не мог бы ты запилить видосик про proxy checker. Выручи плиз)).
P.S. Я думаю в тему "C# - Туториалы" норм будет!
Geek_ _ присоединяюсь
Geek_ _ , ай ай ай ))))
async void это не преступление? для abort не логичнее ли использовать CancelationToken?
Какой клиент лучше юзать для парсинга ? http или webclient ?
>Делаем парсер
>HTMLDocument
Неплохо
Сделай видео где можно было парсить более сложные вещи бро! Спасибо
В конце, когда делаешь форму, невозможно что-то успеть разглядеть, если не жать постоянно паузу и не отматывать назад много раз.
Так ведь придется еще раз смотреть этот отрывок после создания формы, чтобы послушать твою речь.
Найс...
Как сделать чтобы отлавливал теги которые находятся в теге ? Он тупо не видит все что внутри этого тега , хотя то, что внутри так же подходит под параметры. Вот пример:
Моя строка в классе "HabraParser" :
var items = document.QuerySelectorAll("span").Where(x => x.ClassName != null && x.ClassName.Contains("q"));
А вот кусок HTML кода, в котором есть строка, которая подходит под параметры выборки:
....
Оглушает цель на 5 сек.. Действует только на замороженных противников.
....
Но парсер не индексирует то, что находится в теге (в остальном все работает).
Как заставить его индексировать внутри ? Не хочется брать целиком весь и регулярными выражениями выбирать все это.
вопрос почему вы используете в классе ParserWorker в приватном методе Worker() - async void а не async Task? это же не метод обработчик события
Привет, тут все просто, грубо говоря, если необходимо дожидаться выполнения асинхронного метода через await, то делаем его тип Task, если не нужно - то не делаем, в нашем контексте этот метод просто работает в фоне, и информирует о завершении с помощью события, так что тип Task тут не используется
а экспеншны(теоретические если такоевые будут) куда будут вылетать?
Можно делать Task и не дожидаться его. Очень много тем есть на этот счет, мол почему лучше юзать Task, а не void (когда это возможно)
Отличный видос) Жаль, что парсер не подойдёт для тех, кто узнаёт о количестве страниц из пагинации, к примеру :)
Спасибо! Использую в своем проекте =)
Спасибо)
Очень помог)
Тэк будет вторая часть?))
спасибо, как раз что нужно для моего говно-парсера с моими копирайтами
задумка та же, но придется еще научить открывать его страницы и жмакать на кнопки внутри них
Образцовый туториал по кодингу
Все очень круто, а кто-нибудь парсер погоды делал из этого?
удалось сделать ? у меня одна страница на yandex.ru/pogoda/novosibirsk/details?via=mf#2 соответственно мне не нужен переход страниц и я застрял блин.
Ау, где вторая часть? Со сложными примерами??? Уже 4 года прошло!!
братуля, где вторая часть?
учус щас с++ и с# мне интересно если данные с сайта можно получить только с авторизацией как програмно сделать это? или нужен АПИ? мб есть у кого информация
Досмотрел до конца все супер спасибо пиши есче!
Поделитесь пожалуйста Где можно почитать описание библиотеки "AngleSharp" для парсера и в видео вы говорили что есть где то код на исходник но я его не нашел . С уважением IVI.
ыПро, спасибо за C#! Мистя, а к тебе все еще остается один вопрос: Где C# ???
не получается гугл парсить QuerySelectorAll без результатов. такое чуство что натыкаюсь на капчу и не видно никаких классов помогите
давай продолжение.
Ммм...а зачем в HarbraParser.Parse надо было добавлять это все в лист да еще и циклом?
Как научить парсер переходить по ссылкам и парсить данные дальше ?
А у вас *ус отклеился* абстракции потекли
Давай 2-ю часть!!!!!
Не работает проект скаченный. Просит еще какие то пакеты. AngleSharp установлен
Не подскажите? Visual studio 17
там маленькая опечатка, в одном из namespace написано Parser.Cor
Хотел на основе этого кода забацать парсер lostfilm, который просто выводит названия из списка сериалов в listbox, но столкнулся с проблемой. Из-за того, что контент на странице генерируется динамически парсятся только первые 10 строк. Вот ролик о том как это делать, мне бы очень пригодился
посмотри тут: stackoverflow.com/questions/24130650/scraping-data-dynamically-generated-by-javascript-in-html-document-using-c-sharp или попробуй Selenium. Посмотри ещё CefSharp
когда вторая часть ?)
Понимаю, что видос старинный, но! Парсер должен быть универсальным. Пользователь должен только ввести адресс страницы, а затем уже вибирать, что с этой страницы ему надо просто просмотреть , какую-то ссылку скопировать, что -то скачать, преобразовать страницу или запустить свой скрипт на ней. Парсер также должен быть удобен в плане работы с диском ПК. И боже упаси использовать Form... слишком старая технология. Хотя-бы WPF.
Все клево но не очень жизнено. Если будет 500 с хером страниц - затрахаешься парсить. А многопоток без допиливания не завезти
Да не так уж и сложно, цикл Worker'а переделать на while, счетчик вынести в поле и синхронизовать увеличение lock'ом, в методе Start запускать нужное количество раз при помощи Task.Run, только в UI надо тоже при помощи инвоков синхронизовать вывод элементов
В реальных проектах на больших объёмах SAX parser выигрывает
А можете рассказать как из всей это информации вывести только нужное тебе в другое окно (по ключевым словам)
Спасибо за видео!
Есть вопрос, если мне нужно вытянуть УРЛы изображений со всего, не с одной страницы а со всего сайта, это возможно?
Можете помочь?
УРЛ изображения находится здесь:
div[class='img'] на тобі селектор
на 22 строке переменная типа string. присваиваете null.Разве по умолчанию она уже не равна null?
по умолчанию она = "" - (string.empty)
а что делать, если не нужен вообще префикс, например для вк? Я попробовал его убрать, не помогло(
Давай вторую часть! =)
Я нихуя не понял, но ты сделал мне проектную за 2е суток до сдачи
Не надо делать интерфейсы на всё подряд. Зачем они настройкам? Вы не собираетесь их мокать, вам не нужно их переопределять. А уж тем более нельзя чтобы настройки как то по разному генерили поля. То есть настройки это обычный картеж данных передаваемых в процедуру / класс и тд. Они должны быть константы в сути своей.
Ну я захочу переопределить, помокать и даже по разному генерить поля. Идёт расчёт на то, что тот, кто просмотрел видос, сможет допилить ручонками требуемый функционал.
OnSomething?.Invoke(this);
Я не знаю, что это за нотация! Справочники по событиям молчат. Ткните пожалуйста!
Это короткий аналог вот такой конструкции
if(OnSomething != null)
{
OnSomething(this);
}
P.S.
Это делегат, а не событие. У делегатов есть метод Invoke, который по сути аналогичным образом вызывает метод по ссылке, оператор ? проверяет равен ли делегат OnSomething null'у, если там есть что либо, то вызывается метод Invoke со следующими аргументами
Большое спасибо, дядя iPro!
Мне кажется он имел ввиду именование "OnSomething"
Всё аккуенно понятно. Завтра попробую пильнуть. С формами ещё не работал правда, но разобраться можно
Скачал и запустил проект, выкидывает HttpRequestException....
4:09 чудная кнопка! а что если она не появилась?
Ctrl + .
Классный туториал)
Но зачем, а главное нахуя создавать property IsActive если всё равно его не используешь?))
а как ты файл создал??
Спасибо, как ни странно, я большинство понял и вообще заебись представляешь пособие (интересно).
А если серьезно, то через WebSockets как-то проще это делать, не очень понимаю зачем велосипед изобретать)
Что делать если даже не устанавливается?
Install-Package AngleSharp
Install-Package : Совпадения для указанных условий поиска и имени пакета "AngleSharp" не найдены. Чтобы просмотреть все доступные зарегистрированные источники пакетов, исполь
зуйте командлет Get-PackageSource.
строка:1 знак:1
+ Install-Package AngleSharp
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (Microsoft.Power....InstallPackage:InstallPackage) [Install-Package], Exception
+ FullyQualifiedErrorId : NoMatchFoundForCriteria,Microsoft.PowerShell.PackageManagement.Cmdlets.InstallPackage
Слушай, мне нужно сделать которая будет сравнивать файл на сайте с файлом на компе, т.е. проверять обновление файла. если он обновился, то заменить старую версию. может подскажешь чего или видос запилишь?
string str1="any text";
string str2="any text";
bool equal=(str1==str2);//True
bool equal1 = str1.Equals(str2);//True
str2="another text";
equal=(str1==str2);//False
equal1 = str1.Equals(str2);//False
по идеи у класса String есть перегрузка оператора ==, которая неявно выполняет метод Equals, но я могу ошибаться
в ruby это несколько строчек.
День добрый! Проблема с VS 17, нет консольного менеджера пакетов. Что за беда?
И в вид >> другие окна>> нет Package Manager Console. Гугл молчит.
устанавливай NuGet
11:10 ОН ГЕНИЙ!!!
Проблема с выведение данных в ListBox... У кого существуют из мимо проходящих такая проблема?
Очень быстро, моя голова не успевает осознать все) . Приходиться на паузу ставить(
У кого ошибка с библиотекой AngleSharp.Dom.Html; сделайте так: AngleSharp.Html.Dom;
Спасибо, комментатор! Я буду ценить Вашу доброту!!!!
"Скоро эта сраная студия будет кодить за нас". Я бы сказазал даже больше. Студия будет не только говнокодить за вас, но и, если судить по этому видео, проекты автоматически ей сгенерированные будут менее "мусорными" чем написанные вами вручную.
Шта? Ещё раз своё высер прочитай-ка. И переведи для русских.
Я одноклеточным в переводчики не нанимался. Не понимаешь о чем речь - иди смотри стримы лолошки.
"Конструктивную критику" завезли))
А почему бы не использовать токен отмены вместо булевой переменной? :D
Я програмест, я так вижу
А чё видео по удаляли?(была же годнота)
решили, что не соответствует новому формату. Если соскучился по старым видосам, можешь найти их в нашей группе в вк.
отлично работает, только бэйсурл поменять на habrahabr.ru/all
ну и форму проскочил махом, так что чтобы воспроизвести ее тоже помучиться пришлось
Мне нужно получить названия заголовков видео уроков, у меня тоже тег а, но нету свойства class, только href, а ты принимаешь заголовки с помощью class'a, можно ли использовать href вместо class?
Ахах сука два часа смотрел все повторял писал то да се и на паузы ставил а он в конце плять - ну кодец то я оставлю )))) Ну спасибо плять)
Ну если ты как даун, просто всё переписываешь и не учишься, то зачем вообще смотреть было ?
Есть у кого рабочая версия в 2022 году?
Покажи пожалуйста механизм парсинга сайтов на javascriptЕ
Да было бы интересно, в связке с Ajax и обхода ключей защиты еще, цены бы не было . Кайф вообще.
Artem Ermakov , да нефиг делать )))