Под крышей DOM-a моего...(Парсинг HTML и рядом с ним)

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Re: Под крышей DOM-a моего...(Парсинг HTML и рядом с ним)

Сообщение Climber » 13.10.2021 18:44:23

Ichthyander писал(а):Почему Паскалисты в упор не хотят юзать GitHub?
Это же Микрософт, фу такое рекомендовать! :mrgreen:
То ли дело GitLab - практически, поддержка отечественного производителя 8)
Alex2013 писал(а):2 Все мои ссылки с Яндекс-диска начиная с 2013 года живы .
Во-первых, удобство. Когда вы даете ссылку на Яндекс-диск или еще куда, пользователь должен проделать кучу ручных манипуляций. Когда вы даете ссылку на гитхаб/гитлаб, пользователь вводит
Код: Выделить всё
git clone <ссылка на проект>
- и проект готов к использованию.
Во-вторых, на гитхабе и аналогах есть возможность создавать вики-странички с описанием проекта, писать тикеты с описанием найденных багов или запросами на доработку, и т. д., то есть это готовая "взрослая" система управления проектами.
Climber
постоялец
 
Сообщения: 415
Зарегистрирован: 03.06.2007 20:09:57
Откуда: Москва

Re: Под крышей DOM-a моего...(Парсинг HTML и рядом с ним)

Сообщение Ichthyander » 13.10.2021 19:26:05

Alex2013 писал(а):1 Не того уровня проект ( Но идея звести свой уголок на GitHub в принципе уже давно созревает у меня в голове )
2 Все мои ссылки с Яндекс-диска начиная с 2013 года живы .
3 Конкретно Сниффер просто простой порт чужого кода на дельфи (смотри статью: Создание сниффера на Delphi) с дельфи и ничего ценного из себя не представляет просто "к слову пришлось".

1. Не вижу на Гитхабе в лицензионном соглашении об уровне проектов, который заливать туда.
2. Они только для вас живы и никто кроме вас их не видит. Разве что кто-то случайно перейдет по ссылке и случайно распакует.
3. Еще раз: с вас там деньги не берут. Хоть порт, хоть не порт. На гитхабе и портов навалом. Просто если решили выложить паблик зачем выбирать для этого самый неудобный способ???

Добавлено спустя 43 секунды:
Alex2013 писал(а):В смысле СEF4Delphi ? Идея хороша но примерно +200 мБ (и это еще самый минимум! ) к размеру простой программы смотрятся как-то напряженно

Ok: аргумент понят

Добавлено спустя 39 секунд:
Climber писал(а):То ли дело GitLab - практически, поддержка отечественного производителя 8)

Ну можно и gitlab. Еще есть gitbucket. Вообщем, вариантов много... Но ни один не используется (
Аватара пользователя
Ichthyander
энтузиаст
 
Сообщения: 668
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань

Re: Под крышей DOM-a моего...(Парсинг HTML и рядом с ним)

Сообщение Alex2013 » 20.10.2021 16:20:54

В TWebBrowser( точнее в shdocvw_tlb.pas) перестал запускается JS-плеер c сайта
Нашел вот такую штуку...
TEdgeBrowser example for Delphi 10.3.3 v.1.0
https://torry.net/authorsmore.php?id=7915
Как думаете может помочь или возня с портированием себя не оправдает?
Alex2013
долгожитель
 
Сообщения: 2923
Зарегистрирован: 03.04.2013 11:59:44

Re: Под крышей DOM-a моего...(Парсинг HTML и рядом с ним)

Сообщение Снег Север » 20.10.2021 20:38:47

Делал по работе парсер данных со множества разных сайтов на делфи. Если сайт отдает страницы динамически, со встроенными скриптами и перенаправлениями, то TWebBrowser в полной... дупе. СEF4Delphi работает несравненно надежнее. TEdgeBrowser пробовал - он требовал доустановки кучи всего, не понравился. Для хромиума можно, хотя бы, держать нужное в одном комплекте.
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 2993
Зарегистрирован: 27.11.2007 16:14:47

Re: Под крышей DOM-a моего...(Парсинг HTML и рядом с ним)

Сообщение Alex2013 » 20.10.2021 23:45:03

Спасибо за информацию к размышлению , буду думать.
Зы
А что с альтернативным GeckoPort-м ?
Зы Зы
Вообще-то сейчас мне браузер в программе скорее мешает ... А что до загрузки "со скриптами" (точнее со "сложными запросами" и там где онлайн-интерфейс не нужен ) то я с удивлением обнаружил, что с подобной задачей отлично справляется старый добрый WGET ! WGET иногда жужжит даже там где Нативный Хром выпадает в осадок .
Alex2013
долгожитель
 
Сообщения: 2923
Зарегистрирован: 03.04.2013 11:59:44

Re: Под крышей DOM-a моего...(Парсинг HTML и рядом с ним)

Сообщение Снег Север » 21.10.2021 16:46:02

Я имел ввиду что-то такое - есть страница, на ней разные картинки и кнопки, наведешь курсор на определенное место - вываливается поп-ап окно с таблицей данных. Вот эти данные-то мне и нужны. Хромиум позволяет распарсить и страницу, и вытащить данные из этого динамического окошка. Может ли такое WGET не знаю, но TWebBrowser затыкался и всякие синапсы - тоже. GeckoPort по-моему давно забросили.
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 2993
Зарегистрирован: 27.11.2007 16:14:47

Re: Под крышей DOM-a моего...(Парсинг HTML и рядом с ним)

Сообщение Alex2013 » 21.10.2021 17:57:19

1 Понтяно (в этом случае все зависит от конкретной реализации этого "поп-ап окна с таблицей данных" но если там формируется стандартный "потусторонний запрос " WGET вполне поможет )
2 Я основной парсер страниц сайта сделал через "внешний DOM" , а браузер у меня пока что "временная затычка" ( сходу не добрался до непосредственной ссылки на нужный файл вот и юзал тамошний JS-плеер )
3 А вот интересно можно ли "удочерить" окно произвольного браузера причем в желательно в полноэкранном режиме ?
Alex2013
долгожитель
 
Сообщения: 2923
Зарегистрирован: 03.04.2013 11:59:44

Re: Под крышей DOM-a моего...(Парсинг HTML и рядом с ним)

Сообщение Alex2013 » 01.11.2021 06:28:03

Возился с пост-запросами к сайту ... немного разобрался, но как подобные запросы умудрятся проскакивать мимо всех стандартных средств контроля трафика и почему не получается эмулировать пост-запрос через стандартный URL, так и не понял.
Alex2013
долгожитель
 
Сообщения: 2923
Зарегистрирован: 03.04.2013 11:59:44

Re: Под крышей DOM-a моего...(Парсинг HTML и рядом с ним)

Сообщение Alex2013 » 05.11.2021 15:41:07

Интересно почему браузер загружает галереи картинок практически мгновенно, а та же самая операция в моем проекте занимает довольно заметное время ? Кто нибудь сталкивался с подобным и есть ли где-то готовое решение ?
(В сети искал, но пока ничего подходящего не обнаружил )
Зы
Есть мысль все дело в том, что в браузере загрузка картинок галереи идет паралельно а у меня последовательно. Но делать свой поток под каждую картинку видится мне избыточным ... Есть ли более простой и надежный метод "асинхронной загрузки" галереи картинок ? (Раннее думал, что дело масштабировании изображений средствами сервера но после проверки казалось что это почти никак не влияет на скорость загрузки )
Alex2013
долгожитель
 
Сообщения: 2923
Зарегистрирован: 03.04.2013 11:59:44

Re: Под крышей DOM-a моего...(Парсинг HTML и рядом с ним)

Сообщение Ichthyander » 05.11.2021 19:52:39

Alex2013 писал(а):Интересно почему браузер загружает галереи картинок практически мгновенно, а та же самая операция в моем проекте занимает довольно заметное время ? Кто нибудь сталкивался с подобным и есть ли где-то готовое решение ?
(В сети искал, но пока ничего подходящего не обнаружил )
Зы
Есть мысль все дело в том, что в браузере загрузка картинок галереи идет паралельно а у меня последовательно. Но делать свой поток под каждую картинку видится мне избыточным ... Есть ли более простой и надежный метод "асинхронной загрузки" галереи картинок ? (Раннее думал, что дело масштабировании изображений средствами сервера но после проверки казалось что это почти никак не влияет на скорость загрузки )

Во-первых, картинки наверняка кешированы. В некоторых случаях, даже F5 не приводит к тому, что картинку загружается заново.
Во-вторых, да, действительно, картинки загружается параллельно. Причем зачастую загрузка их начинается до того, как загрузится вся HTML страница. И много других оптимизаций и технологий в популярных браузерах для увеличения скорости загрузки.
Почему избыточно то многопоточность? Хотите асинхронности без нее не обойтись. ПРосто правильную архитектуру выбрать
Аватара пользователя
Ichthyander
энтузиаст
 
Сообщения: 668
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань

Re: Под крышей DOM-a моего...(Парсинг HTML и рядом с ним)

Сообщение Alex2013 » 05.11.2021 21:03:12

Ichthyander писал(а):Почему избыточно то многопоточность? Хотите асинхронности без нее не обойтись.


Просто есть идея что проще будет открыть кучу закачек, а потом в одном общем цикле читать из каждого потока (TStream) хоть по одному байту и тогда все проблемы с буферизаций синхронизаций и прочие заморочки возьмет на себя ОС .
Разумеется все это будет работать если запрос httpclient.Get только активирует чтение, а реально оно происходит в Stream.Read . Но то как лихо (пусть и неидеально) работает позиционирование в моем встроенном в программу самодельном ВидеоПлеере (где я ничего по сути не менял, а просто сменил источник потока с файлового на "сетевой") как бы намекает на то что я прав.
Alex2013
долгожитель
 
Сообщения: 2923
Зарегистрирован: 03.04.2013 11:59:44

Re: Под крышей DOM-a моего...(Парсинг HTML и рядом с ним)

Сообщение Alex2013 » 12.11.2021 19:42:27

Прикрутил мультипоточную загрузку загрузку галереи ... Приятно удивился скорости работы . :idea: :shock:
(Правда вначале пришлось срочно делать реентерабельную версию загрузчика (и выкинуть все "псевдо оптимизации" которые я делал для однопоточного режима ) )

Теперь можно вздохнуть и позаботится о надежности . (мучают меня "смутные сомнения" по поводу утечек памяти, повисших "воздухе" указателей и своевременного завершения пула-процессов (для пробы добавил каждой картинке свой поток и на удивление все работает ). )
Зы
Вопрос : Считается ли штатным вызов "терминатора потока" из него самого ? (По идее так и задумано иначе зачем спрашивается нужен флаг FreeOnTerminate . )
Последний раз редактировалось Alex2013 12.11.2021 23:55:32, всего редактировалось 4 раз(а).
Alex2013
долгожитель
 
Сообщения: 2923
Зарегистрирован: 03.04.2013 11:59:44

Re: Под крышей DOM-a моего...(Парсинг HTML и рядом с ним)

Сообщение Ichthyander » 12.11.2021 21:21:59

Alex2013 писал(а):вызов "терминатора потока"

Если под этим имелось ввиду простое Terminate, то вопрос не совсем понятен: эта процедура просто ставит флаг Terminated, что есть просто булево поле в потоке. А вот ваша задача, если вдруг алгоритм заметил установку этого флага (к примеру, в цикле while), выйти из цикла, который выполняется в переопределенной процедуры Execute. Собственно, по выходу уже из процедуры Execute все служебные действия потока TThread выполнятся в нужном порядке. Рекомендую почитать тут вкратце
Аватара пользователя
Ichthyander
энтузиаст
 
Сообщения: 668
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань

Re: Под крышей DOM-a моего...(Парсинг HTML и рядом с ним)

Сообщение Alex2013 » 12.11.2021 22:43:42

Ichthyander писал(а):Рекомендую почитать тут вкратце

Спасибо !
Зы
"имелось ввиду простое Terminate" Простое то оно простое но когда я когда-то давно пытался сделать "одноразовый Execute" вообще без цикла это и внезапно не заработало . То есть, реально в потоке есть код который выполняется до и после кода Execute и так просто даже шаблон "while (not Terminated)" не поменять . Так что я думаю, что возможно и с "простым флагом" все не так просто.
Последний раз редактировалось Alex2013 13.11.2021 01:16:51, всего редактировалось 1 раз.
Alex2013
долгожитель
 
Сообщения: 2923
Зарегистрирован: 03.04.2013 11:59:44

Re: Под крышей DOM-a моего...(Парсинг HTML и рядом с ним)

Сообщение Ichthyander » 12.11.2021 23:04:48

Конечно, есть код, который выполняется до процедуры Execute и после. Самое в лоб, это к примеру ивенты BeforeExecute, AfterExecute, OnTerminate.
Аватара пользователя
Ichthyander
энтузиаст
 
Сообщения: 668
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань

Пред.След.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Alex2013, Google [Bot], Yandex [Bot] и гости: 26

Рейтинг@Mail.ru