Делаем парсер HTML на C#

Поделиться
HTML-код
  • Опубликовано: 3 окт 2024
  • Всем привет! В этом видео уроке мы сделаем HTML парсер на C#.
    ► ► ► ► ► ► ►
    Проект bit.ly/2m70LtE
    ► ► ► ► ► ► ►
    C# в Unity bit.ly/2lrwIdN
    ► ► ► ► ► ► ►
    C# для студентоты bit.ly/2ld0xka
    ► ► ► ► ► ► ►
    C# для маленьких и тупых: bit.ly/2lmEtR4
    ► ► ► ► ► ► ►
    VK: extreme...

Комментарии • 184

  • @TakuatChanel
    @TakuatChanel 5 лет назад +46

    Спасибо, хоть ролик и идет 20 минут, но я потратил на его просмотр около 4 дней вникая в интерфейсы, обобщения и прочее, узнал много полезного вообщем)

  • @victorpolyakov3031
    @victorpolyakov3031 2 года назад +2

    Черт, я чувствую себя умным! Я понимаю, что тут происходит! Продолжай выпускать такие простые ролики))

  • @trueyolu1906
    @trueyolu1906 7 лет назад +3

    Большое тебе спасибо за видео.
    Это моё первое видео, которое я смотрю на твоём канале, и оно очень сильно меня радует. Обязательно подписываюсь! :)

  • @xeleos
    @xeleos 4 года назад +64

    У HtmlParser уже нет такого метода ParseAsync, теперь он называется ParseDocumentAsync

    • @andrewhkh23
      @andrewhkh23 3 года назад +2

      Благодарю дружище помог)

    • @nellaiiiii
      @nellaiiiii Год назад

      HttpParser не находит, не знаешь в чем проблема?

  • @intsyn
    @intsyn 6 лет назад +14

    То чувство когда начинаешь понимать что такое интерфейсы, как их реализовывают ...

  • @kenguru1941
    @kenguru1941 6 лет назад +7

    Может раньше и работало, но сейчас в классе HtmlLoader нужно в строке url = $"{settings.BaseUrl}/{settings.Prefix}/"; убрать один слеш между скобок. Вот так - url = $"{settings.BaseUrl}{settings.Prefix}/"; Иначе будет парсить на одной странице.

  • @sierraww2
    @sierraww2 7 лет назад +5

    Чувак ты самый лучший!!!! Удачи тебе во всем!

  • @nikbrons
    @nikbrons 7 лет назад +3

    Было бы шикарно увидеть этот парсер, но в обертке MVC/MVP или MVVM)

  • @oleksandrshmalko626
    @oleksandrshmalko626 5 лет назад +1

    Дядечка айПро , респект тебе от английского комьюнити и уважение от пацанов , помог

  • @gevamain1751
    @gevamain1751 4 года назад +80

    И вот уже почти 2020 год, а второй части так и нет(( за слова не отвечаешь ска!!!(тип агро)

  • @Algok17
    @Algok17 4 года назад +2

    Крутяк! Давно хотел научиться парсить сайты и тут на этот урок наткнулся. Всё понятно объясняешь, красиво кодишь и шутеички в меру. Снимаю шляпу, качаю проект.

    • @Algok17
      @Algok17 4 года назад +1

      Сразу не запустилось. Нужно обновить AngleSharp и перед отправкой запроса в строке var response = await client.GetAsync(currentUrl); выполнить ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;

    • @Algok17
      @Algok17 4 года назад

      В идеале бы @ExtremeCode мой пулл реквест принял - там всё готово уже.

  • @ВикторКурышев-ч3р
    @ВикторКурышев-ч3р 6 лет назад +1

    Парни, респект. Отличный видос. С удовольствием повторил, многому научился.

  • @johanesskrauseriii3798
    @johanesskrauseriii3798 7 лет назад +72

    Ну вот опять. Видео 24 минуты идёт, а делаешь всё 2-3 часа, ибо надо загуглить все непонятные моменты.

  • @mikedastro2930
    @mikedastro2930 5 лет назад +8

    что то пошло не так в Parser Worker в вызове метода //// короче var htmlparser = new HtmlParser();
    var doc = await htmlparser.ParseDocumentAsync(нет ParseAsync() (( чем его заменить ))(source.ToString(),System.Threading.CancellationToken.None);
    var result =Parser.Parse(doc);

    • @Андрей-я7н6к
      @Андрей-я7н6к 5 лет назад

      помог. очень помог. не знаю, почему другие с такой же проблемой не столкнулись

    • @sp1ne2104
      @sp1ne2104 5 лет назад +1

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

    • @КириллЕвстратов-е2л
      @КириллЕвстратов-е2л 5 лет назад

      у меня при создании экземпляра HtmlParser падает, пишет:
      "Additional information: Не удалось загрузить файл или сборку "System.Text.Encoding.CodePages, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" либо одну из их зависимостей. Не удается найти указанный файл."
      Хотя я воспользовался подсказкой и все красные подчеркивания убрались.
      Нагуглил что то про добавление в конфиг этого:
      но не помогло, ошибок нет, но падает

  • @vladisslavss
    @vladisslavss 2 года назад +2

    Ты просто лучший!)
    После тяжелого рабочего дня твои видосики словно бальзам!)

  • @gilman2056
    @gilman2056 7 лет назад +145

    Вот никуя не понятно, но один х интересно смотреть

    • @apdgslfhsodbna
      @apdgslfhsodbna 6 лет назад +2

      ))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))

    • @t3m8ch
      @t3m8ch 5 лет назад

      А я понял только после самостоятельного прочтения на GitHub)

  • @koshatec
    @koshatec 4 года назад +2

    Фу фу фу за WF. Кодинг с юмором мне заходит. Лайк, подписка

  • @SuleimanVatrushkin
    @SuleimanVatrushkin 5 лет назад +15

    Нихуя не понял, но очень интересно!

  • @johnwalker1232
    @johnwalker1232 7 лет назад

    Спасибо за видео, давно его ждал.
    Отличный канал!

  • @АлександрЯркин-й9я
    @АлександрЯркин-й9я 5 лет назад +5

    Пиздатый код. Пиздатое ооп. Пиздатый парсер

  • @anonimanonim1428
    @anonimanonim1428 4 года назад +2

    Ну ви іздіваєтися, превратили один маленький клас, в цілий проект!

  • @Independent19c
    @Independent19c 7 лет назад

    вау,вот это оперативно только бахнул вопрос. на трансляции про парсер и вуаля) класс спасибо!Лайк жирнющий!

  • @collesssqwer1673
    @collesssqwer1673 4 года назад +1

    я конечно не эксперт да и видео уже попахивает "актуальной" информацией но на моменте 6:34 разве не лучше ли было использовать Select, (и выбрать нужное свойство вместо того чтобы всё в лист через цикл записывать), а потом сразу же вызвать метод ToArray(), или это такой High Level стёб который слишком крут для меня ?

  • @serios7149
    @serios7149 6 лет назад +3

    Ждем вторую часть)

  • @milovidov42
    @milovidov42 6 лет назад +1

    До конца еще не досмотрел но вот комментарии автора просто чумовые! )

  • @geek__3743
    @geek__3743 7 лет назад +17

    Привет! Помнишь давным давно, вы писали парсер proxy?(Кто помнит и видел ставьте лайк ;)) Так вот, не мог бы ты запилить видосик про proxy checker. Выручи плиз)).
    P.S. Я думаю в тему "C# - Туториалы" норм будет!

    • @bad_jaguar
      @bad_jaguar 6 лет назад +2

      Geek_ _ присоединяюсь

    • @apdgslfhsodbna
      @apdgslfhsodbna 6 лет назад +2

      Geek_ _ , ай ай ай ))))

  • @НиколайВьюгин-ъ5ш
    @НиколайВьюгин-ъ5ш 2 года назад +1

    Повторил за автором, 5 лет дали о себе знать, 20 ошибок....

  • @dimakom2726
    @dimakom2726 6 лет назад +1

    Мудрено, но понятно) Лукас!

  • @stanislavhrytsyshyn1732
    @stanislavhrytsyshyn1732 7 лет назад +2

    Спасибо, хорошая работа парень!

  • @Abo56Volo
    @Abo56Volo 6 лет назад +2

    а я использую Selenium для этих целях. Парсить через CSS либо XPath. Удобно, когда надо парсить защищенного текста.

  • @fullboarduck5491
    @fullboarduck5491 3 года назад +1

    Кажется я не туда полез, мне сюда ещё рано(

  • @AlexM-gn7bp
    @AlexM-gn7bp 7 лет назад +1

    А вообще спасибо за видео, хороший пример наглядного использования интерефейсов да еще и обобщенных

  • @santiago1488
    @santiago1488 5 лет назад

    братик, спасиб от души душевно в душу
    +лайк +подписка

  • @snakelivegames821
    @snakelivegames821 6 лет назад

    Как же ты классно это записал, лайк тебе за креативность и полезность информации. Спасибо

  • @artursveshnikov7668
    @artursveshnikov7668 3 года назад +1

    Сделал на .net core 3.1 буква в букву, всё отлично работает.

  • @БанкирТв-к2л
    @БанкирТв-к2л 3 года назад

    Молодец, шо тут сказать, юмор прикольный)

  • @maxbrain9205
    @maxbrain9205 6 лет назад +3

    В конце, когда делаешь форму, невозможно что-то успеть разглядеть, если не жать постоянно паузу и не отматывать назад много раз.
    Так ведь придется еще раз смотреть этот отрывок после создания формы, чтобы послушать твою речь.
    Найс...

  • @alisher.sabirov
    @alisher.sabirov 6 лет назад +3

    Сделай видео где можно было парсить более сложные вещи бро! Спасибо

  • @iseengreenenjoyer
    @iseengreenenjoyer 3 года назад

    >Делаем парсер
    >HTMLDocument
    Неплохо

  • @РоманКанарейкин
    @РоманКанарейкин 4 года назад +1

    Как сделать чтобы отлавливал теги которые находятся в теге ? Он тупо не видит все что внутри этого тега , хотя то, что внутри так же подходит под параметры. Вот пример:
    Моя строка в классе "HabraParser" :
    var items = document.QuerySelectorAll("span").Where(x => x.ClassName != null && x.ClassName.Contains("q"));
    А вот кусок HTML кода, в котором есть строка, которая подходит под параметры выборки:
    ....
    Оглушает цель на 5 сек.. Действует только на замороженных противников.
    ....

    Но парсер не индексирует то, что находится в теге (в остальном все работает).
    Как заставить его индексировать внутри ? Не хочется брать целиком весь и регулярными выражениями выбирать все это.

  • @linker-arm
    @linker-arm 2 года назад

    Спосибо тебе, дядюшка IPro

  • @yaroslavkolyada6914
    @yaroslavkolyada6914 Год назад

    async void это не преступление? для abort не логичнее ли использовать CancelationToken?

  • @Ramzes646
    @Ramzes646 7 лет назад

    iPro, большое спасибо. Продолжай!

  • @MegaSping
    @MegaSping 7 лет назад +1

    спасибо, как раз что нужно для моего говно-парсера с моими копирайтами
    задумка та же, но придется еще научить открывать его страницы и жмакать на кнопки внутри них

  • @Alpaha92
    @Alpaha92 7 лет назад +1

    Отличный видос) Жаль, что парсер не подойдёт для тех, кто узнаёт о количестве страниц из пагинации, к примеру :)

  • @stepanzvarich6699
    @stepanzvarich6699 7 лет назад +1

    Спасибо)
    Очень помог)

  • @Simon-tk8im
    @Simon-tk8im 7 лет назад +1

    Все очень круто, а кто-нибудь парсер погоды делал из этого?

    • @artemadeev7444
      @artemadeev7444 4 года назад

      удалось сделать ? у меня одна страница на yandex.ru/pogoda/novosibirsk/details?via=mf#2 соответственно мне не нужен переход страниц и я застрял блин.

  • @AlexM-gn7bp
    @AlexM-gn7bp 7 лет назад +1

    вопрос почему вы используете в классе ParserWorker в приватном методе Worker() - async void а не async Task? это же не метод обработчик события

    • @ExtremeCode
      @ExtremeCode  7 лет назад

      Привет, тут все просто, грубо говоря, если необходимо дожидаться выполнения асинхронного метода через await, то делаем его тип Task, если не нужно - то не делаем, в нашем контексте этот метод просто работает в фоне, и информирует о завершении с помощью события, так что тип Task тут не используется

    • @AlexM-gn7bp
      @AlexM-gn7bp 7 лет назад

      а экспеншны(теоретические если такоевые будут) куда будут вылетать?

    • @vladyslavromanov7039
      @vladyslavromanov7039 7 лет назад

      Можно делать Task и не дожидаться его. Очень много тем есть на этот счет, мол почему лучше юзать Task, а не void (когда это возможно)

  • @Alex-w1v7k
    @Alex-w1v7k 7 лет назад +1

    Ммм...а зачем в HarbraParser.Parse надо было добавлять это все в лист да еще и циклом?

  • @eynsherkiel4913
    @eynsherkiel4913 5 лет назад +3

    Не надо делать интерфейсы на всё подряд. Зачем они настройкам? Вы не собираетесь их мокать, вам не нужно их переопределять. А уж тем более нельзя чтобы настройки как то по разному генерили поля. То есть настройки это обычный картеж данных передаваемых в процедуру / класс и тд. Они должны быть константы в сути своей.

    • @magpiehq8973
      @magpiehq8973 2 года назад +1

      Ну я захочу переопределить, помокать и даже по разному генерить поля. Идёт расчёт на то, что тот, кто просмотрел видос, сможет допилить ручонками требуемый функционал.

  • @gloomkol
    @gloomkol 7 лет назад +7

    ыПро, спасибо за C#! Мистя, а к тебе все еще остается один вопрос: Где C# ???

  • @AzizjanAyupov_leo
    @AzizjanAyupov_leo 4 года назад +1

    Классный туториал)
    Но зачем, а главное нахуя создавать property IsActive если всё равно его не используешь?))

  • @alexandrsharp920
    @alexandrsharp920 4 года назад

    Какой клиент лучше юзать для парсинга ? http или webclient ?

  • @slivich
    @slivich 6 лет назад

    А можете рассказать как из всей это информации вывести только нужное тебе в другое окно (по ключевым словам)

  • @leonid_konoplin
    @leonid_konoplin 5 лет назад +2

    братуля, где вторая часть?

  • @MrSinn3r
    @MrSinn3r 7 лет назад +3

    А у вас *ус отклеился* абстракции потекли

  • @BoxaShu
    @BoxaShu 7 лет назад +13

    давай продолжение.

  • @almazmusic
    @almazmusic 4 года назад +1

    Образцовый туториал по кодингу

  • @TOPCHANNELSTOP
    @TOPCHANNELSTOP 3 года назад

    Тэк будет вторая часть?))

  • @АлександрИви
    @АлександрИви 6 лет назад

    Поделитесь пожалуйста Где можно почитать описание библиотеки "AngleSharp" для парсера и в видео вы говорили что есть где то код на исходник но я его не нашел . С уважением IVI.

  • @milovidov42
    @milovidov42 6 лет назад +1

    Досмотрел до конца все супер спасибо пиши есче!

  • @andriimilkevych1844
    @andriimilkevych1844 3 года назад

    Ау, где вторая часть? Со сложными примерами??? Уже 4 года прошло!!

  • @norker43
    @norker43 5 лет назад

    Хотел на основе этого кода забацать парсер lostfilm, который просто выводит названия из списка сериалов в listbox, но столкнулся с проблемой. Из-за того, что контент на странице генерируется динамически парсятся только первые 10 строк. Вот ролик о том как это делать, мне бы очень пригодился

    • @sp1ne2104
      @sp1ne2104 5 лет назад +1

      посмотри тут: stackoverflow.com/questions/24130650/scraping-data-dynamically-generated-by-javascript-in-html-document-using-c-sharp или попробуй Selenium. Посмотри ещё CefSharp

  • @Coool
    @Coool 7 лет назад +3

    Все клево но не очень жизнено. Если будет 500 с хером страниц - затрахаешься парсить. А многопоток без допиливания не завезти

    • @ExtremeCode
      @ExtremeCode  7 лет назад +2

      Да не так уж и сложно, цикл Worker'а переделать на while, счетчик вынести в поле и синхронизовать увеличение lock'ом, в методе Start запускать нужное количество раз при помощи Task.Run, только в UI надо тоже при помощи инвоков синхронизовать вывод элементов

    • @ПавелТ-л7ь
      @ПавелТ-л7ь 7 лет назад

      В реальных проектах на больших объёмах SAX parser выигрывает

  • @followtheculture8817
    @followtheculture8817 6 лет назад +1

    Как научить парсер переходить по ссылкам и парсить данные дальше ?

  • @TheShadow0197
    @TheShadow0197 6 лет назад

    Спасибо! Использую в своем проекте =)

  • @_petux7355
    @_petux7355 2 года назад

    Я нихуя не понял, но ты сделал мне проектную за 2е суток до сдачи

  • @testantestovich1698
    @testantestovich1698 6 лет назад +1

    Спасибо за видео!
    Есть вопрос, если мне нужно вытянуть УРЛы изображений со всего, не с одной страницы а со всего сайта, это возможно?
    Можете помочь?
    УРЛ изображения находится здесь:

    • @anonimanonim1428
      @anonimanonim1428 4 года назад

      div[class='img'] на тобі селектор

  • @yuriilitvin3306
    @yuriilitvin3306 4 года назад +1

    Давай 2-ю часть!!!!!

  • @avalonex2971
    @avalonex2971 Год назад

    удивительно как человек предсказал это событие: 4:10

  • @RosemiNext
    @RosemiNext 3 года назад

    Понимаю, что видос старинный, но! Парсер должен быть универсальным. Пользователь должен только ввести адресс страницы, а затем уже вибирать, что с этой страницы ему надо просто просмотреть , какую-то ссылку скопировать, что -то скачать, преобразовать страницу или запустить свой скрипт на ней. Парсер также должен быть удобен в плане работы с диском ПК. И боже упаси использовать Form... слишком старая технология. Хотя-бы WPF.

  • @Мастер-б6х
    @Мастер-б6х 6 лет назад +1

    Не работает проект скаченный. Просит еще какие то пакеты. AngleSharp установлен
    Не подскажите? Visual studio 17

  • @maksymo9917
    @maksymo9917 7 лет назад +6

    когда вторая часть ?)

  • @yazimmaable
    @yazimmaable 5 лет назад

    на 22 строке переменная типа string. присваиваете null.Разве по умолчанию она уже не равна null?

  • @vadimzhuravskyi7222
    @vadimzhuravskyi7222 Год назад

    учус щас с++ и с# мне интересно если данные с сайта можно получить только с авторизацией как програмно сделать это? или нужен АПИ? мб есть у кого информация

  • @bad_jaguar
    @bad_jaguar 6 лет назад

    Всё аккуенно понятно. Завтра попробую пильнуть. С формами ещё не работал правда, но разобраться можно

  • @НиколайФролов-м3м
    @НиколайФролов-м3м 7 лет назад

    Давай вторую часть! =)

  • @ВНаушниках-о7н
    @ВНаушниках-о7н 5 лет назад

    не получается гугл парсить QuerySelectorAll без результатов. такое чуство что натыкаюсь на капчу и не видно никаких классов помогите

  • @РинатРаот
    @РинатРаот 7 лет назад

    Блин,круто))

  • @kem0n
    @kem0n 6 лет назад +1

    Скачал и запустил проект, выкидывает HttpRequestException....

  • @RubySirius
    @RubySirius 7 лет назад

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

    • @geek__3743
      @geek__3743 7 лет назад

      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, но я могу ошибаться

  • @CrafterMinecrafter
    @CrafterMinecrafter 5 лет назад +1

    11:10 ОН ГЕНИЙ!!!

  • @andrmiw9
    @andrmiw9 6 лет назад

    а что делать, если не нужен вообще префикс, например для вк? Я попробовал его убрать, не помогло(

  • @valtaiga
    @valtaiga 7 лет назад

    Спасибо, как ни странно, я большинство понял и вообще заебись представляешь пособие (интересно).
    А если серьезно, то через WebSockets как-то проще это делать, не очень понимаю зачем велосипед изобретать)

  • @ДмитрийН-л9ф
    @ДмитрийН-л9ф 6 лет назад +1

    4:09 чудная кнопка! а что если она не появилась?

  • @GrafMKristo
    @GrafMKristo 7 лет назад +6

    OnSomething?.Invoke(this);
    Я не знаю, что это за нотация! Справочники по событиям молчат. Ткните пожалуйста!

    • @ExtremeCode
      @ExtremeCode  7 лет назад +18

      Это короткий аналог вот такой конструкции
      if(OnSomething != null)
      {
      OnSomething(this);
      }
      P.S.
      Это делегат, а не событие. У делегатов есть метод Invoke, который по сути аналогичным образом вызывает метод по ссылке, оператор ? проверяет равен ли делегат OnSomething null'у, если там есть что либо, то вызывается метод Invoke со следующими аргументами

    • @GrafMKristo
      @GrafMKristo 7 лет назад +2

      Большое спасибо, дядя iPro!

    • @Excalib
      @Excalib 6 лет назад

      Мне кажется он имел ввиду именование "OnSomething"

  • @xbmusics
    @xbmusics 3 года назад

    Проблема с выведение данных в ListBox... У кого существуют из мимо проходящих такая проблема?

  • @K14M
    @K14M Год назад

    Что делать если даже не устанавливается?
    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

  • @forcewillbewithyoualways3116
    @forcewillbewithyoualways3116 7 лет назад

    Спасибо!

  • @adhamkhaytbaev16
    @adhamkhaytbaev16 2 года назад

    а как ты файл создал??

  • @kamushekdev
    @kamushekdev 6 лет назад

    А почему бы не использовать токен отмены вместо булевой переменной? :D

    • @ExtremeCode
      @ExtremeCode  6 лет назад +7

      Я програмест, я так вижу

  • @UserName-bh7sv
    @UserName-bh7sv 7 лет назад +50

    "Скоро эта сраная студия будет кодить за нас". Я бы сказазал даже больше. Студия будет не только говнокодить за вас, но и, если судить по этому видео, проекты автоматически ей сгенерированные будут менее "мусорными" чем написанные вами вручную.

    • @GrafMKristo
      @GrafMKristo 7 лет назад

      Шта? Ещё раз своё высер прочитай-ка. И переведи для русских.

    • @UserName-bh7sv
      @UserName-bh7sv 7 лет назад +22

      Я одноклеточным в переводчики не нанимался. Не понимаешь о чем речь - иди смотри стримы лолошки.

    • @TedFanat
      @TedFanat 6 лет назад +1

      "Конструктивную критику" завезли))

  • @GGamess
    @GGamess 2 года назад

    в ruby это несколько строчек.

  • @SerGasparyan
    @SerGasparyan 6 лет назад +4

    Ахах сука два часа смотрел все повторял писал то да се и на паузы ставил а он в конце плять - ну кодец то я оставлю )))) Ну спасибо плять)

    • @nixhalla3uk27
      @nixhalla3uk27 6 лет назад

      Ну если ты как даун, просто всё переписываешь и не учишься, то зачем вообще смотреть было ?

  • @АртёмЗ-ъ3у
    @АртёмЗ-ъ3у 7 лет назад +1

    чувак ты зэ бэст

  • @sdfsdfgs
    @sdfsdfgs 7 лет назад +1

    А чё видео по удаляли?(была же годнота)

    • @НиколайНиколаев-ю6п
      @НиколайНиколаев-ю6п 7 лет назад +2

      решили, что не соответствует новому формату. Если соскучился по старым видосам, можешь найти их в нашей группе в вк.

  • @Drapiks
    @Drapiks 7 лет назад

    лайк неглядя

  • @cyrilk4338
    @cyrilk4338 5 лет назад

    Спасибо !!!

  • @ЭрендженБамбушев-о6с

    Очень быстро, моя голова не успевает осознать все) . Приходиться на паузу ставить(

  • @mikhailsloushch5052
    @mikhailsloushch5052 4 года назад

    А зачем инициаривать HtmlParser в цикле for? Это можно сделать один раз вне цикла. Плюс, непонятне зачем отменять работе через переменную bool, если ты все делаешь асинхронно и можно просто впулить Cancellation Token?