dimiii
06.06.2018
11:26:06
A64m
06.06.2018
11:26:47
base>=4 && <4.11 base 4.11 это ghc 8.4
dimiii
06.06.2018
11:29:19
Yuriy
06.06.2018
11:34:06
или через stack, если они такой вариант предлагают
Google
kana
06.06.2018
11:56:09
instance ( Show a
, Show (f r)
, forall x. Show x => Show (f (g x))
) => Show (Expression a g f r) where
show (ClosedExpression x) =
"(Closed " ++ show x ++ ")"
show (OpenExpression x y) =
"(Open " ++ show x ++ " " ++ show y ++ ")"
типа такого
0x739d6cd673fffb80
06.06.2018
13:17:59
Sergey
06.06.2018
13:33:01
всем здравствуйте. возникла задача заменить удалить пару тегов в HTML, вопрос: что юзать для этого?
Leonid
06.06.2018
13:34:01
sed
Yuriy
06.06.2018
13:34:05
руками
Sergey
06.06.2018
13:34:15
все не настолько просто)
переформулирую, функция принимает на вход Text, который HTML, оттуда надо выкинуть несколько тегов с определенным классом/id, и вернуть Text
то бишь сами теги не всегда один и тот же статичный текст
Serghei
06.06.2018
13:41:23
тебе нужен sanitizer условно говоря, которому чере параметры говорить что именно чистить/экранировать?
Sergey
06.06.2018
13:41:50
ну можно и так сказать да
Anatolii
06.06.2018
13:53:07
Sergey
06.06.2018
13:54:16
пасиба! гляну
Google
Yuriy
06.06.2018
13:56:52
Sergey
06.06.2018
13:57:25
HTML это тот же XML
Anatolii
06.06.2018
13:58:19
вот только написать хотел
:)
Ignat
06.06.2018
13:59:14
S G M L
G
M
L
kana
06.06.2018
13:59:34
xml тоже прощает пропущенные закрытые теги?
Sergey
06.06.2018
13:59:43
нет
но и HTML Не прощает
kana
06.06.2018
13:59:54
ну значит html это не xml
Sergey
06.06.2018
13:59:59
это уже хитрые браузеры
kana
06.06.2018
14:00:03
html по спеке таки прощает
Ignat
06.06.2018
14:00:22
AFAIR можно вполне легально не закрывать <tr> и <td>, например
не говоря о каком-нибудь <br>
Anatolii
06.06.2018
14:01:10
помойму у hxt есть режим html
который прощает не закрыте теги
Andrei
06.06.2018
14:03:16
sed
H̸̡̪̯ͨ͊̽̅̾̎Ȩ̬̩̾͛ͪ̈́̀́͘ ̶̧̨̱̹̭̯ͧ̾ͬC̷̙̲̝͖ͭ̏ͥͮ͟Oͮ͏̮̪̝͍M̲̖͊̒ͪͩͬ̚̚͜Ȇ̴̟̟͙̞ͩ͌͝Sͯ ̨̥̫͎̭̔̀ͅ
Leonid
06.06.2018
14:03:34
Stepan
06.06.2018
14:16:15
Короче всё сказанное к тому, что это делается НЕ регулярными выражениями, НЕ хаскелем. Вероятно что-то близкое к парсеру xml.
Также это НЕ делается САМОПИСНЫМ парсером, никогда.
Гугль в помощь
Anatolii
06.06.2018
14:18:21
hxt как раз хорошу на эту роль подходит, там конечно по началу тяжеловато начать им пользоваться
Leonid
06.06.2018
14:29:55
для html скорее какой tagsoup
Google
Yuriy
06.06.2018
14:36:13
Евгений
06.06.2018
14:36:46
html это sgml
Yuriy
06.06.2018
14:39:17
Alexander
06.06.2018
14:41:07
Stepan
06.06.2018
14:42:13
XSLT!
А оно может с html? Ведь как уже сказали html /= xml
Alexander
06.06.2018
14:42:32
не должно )
вообще парсинг HTML это на редкость неблагодарное дело, там доже тэги не сбалансированы
я где то читал статью где ребята из гугл рекомендоали не закрывать <p> и <li>
Andrei
06.06.2018
14:46:56
идея стартапа – парсер HTML as a service (с безголовым chrome под капотом)
Yuriy
06.06.2018
14:54:26
Alexander
06.06.2018
14:54:45
selenium-standalone-chrome
Dmitry
06.06.2018
14:55:00
у сноймана вроде был более менее норм. парсер
правда не помню, как он к malformed html относился
если надо кривой html, то тагсуп. но он тормоз.
A64m
06.06.2018
14:56:47
никто еще тэгсуп поверх зено или как там его не сделал?
Alexander
06.06.2018
15:03:12
@catamorphism чтотр делал вроде
Denis
06.06.2018
15:04:27
https://github.com/dredozubov/sax-parser я вот это сделал, оно быстрее снойман-xmlей, но открыто всем рекомендовать пока не готов в силу специфичности и дебильных сообщений об ошибках
Leonid
06.06.2018
15:18:48
/me опять был обижен сервантом
Евгений
06.06.2018
15:28:01
Google
? animufag ?
06.06.2018
15:37:54
это же как-то ненормально что toList встречается в Foldable и в GHC.Exts.IsList?
да и как-то можно ж было этот тайпкласс в прелюдию затолкать. вроде полезен и вне контекста списковых литералов
Alexander
06.06.2018
15:39:13
И в maybe ещё
0x739d6cd673fffb80
06.06.2018
15:39:14
А существуют модули, позволяющие хаскельной программе обращаться к другому модулю БЕЗ компиляции того? Звучит безумно, но вдруг
Andrey
06.06.2018
15:41:10
а как ты себе это представляешь?
? animufag ?
06.06.2018
15:41:20
И в maybe ещё
ну это со временем сложилось. но Foldable и IsList я думаю примерно в одно время появлялись
Yuriy
06.06.2018
16:06:22
DOM-то даст
если не заточен на HTML? в лучшем случае даст AST
Евгений
06.06.2018
16:06:39
Ну AST html'я и есть дом
div (attr: ...) -> div -> и т.д.
Только body извлеки, да и всё
Leonid
06.06.2018
16:11:55
SOOOQUA нужно было офранов для servant-streaming заимпортировать. 2 часа бился головой об стол
Yuriy
06.06.2018
16:14:41
Евгений
06.06.2018
16:15:57
Не похожи они по синтаксису, в одном случае у тебя img в a, а в другом a в img
Иерархия разная же
Алексей Ayaye :)
06.06.2018
16:27:16
а есть задача сохранить исходный html, за исключением некотрых тегов? или на выходе может быть эквивалентный исходному с замененными тегами? вторая задача решается без проблем, насколько мне известно (не на хаскеле)
Yuriy
06.06.2018
16:32:41
Евгений
06.06.2018
16:33:53
Yuriy
06.06.2018
17:00:16
SGML не знает, чем отличаются открывающие тэги от отдельно стоящих
эту проблему исправили только в XML
Sergey
06.06.2018
17:02:25
ну, на руби оно фигак фигак и готово. Nokogiri норм с этим справляется
Google
Sergey
06.06.2018
17:02:34
но надо на хаскеле
Евгений
06.06.2018
17:02:55
Что-то ты очень странное говоришь
Yuriy
06.06.2018
17:04:38
я проверю и вернусь с доказательствами
Евгений
06.06.2018
17:05:44
И как оно тогда интерпретируется?
Ignat
06.06.2018
17:06:05
ну их вкладывать друг в друга нельзя, поэтому неоднозначностей не возникает
Imants
06.06.2018
17:25:26
Там всё просто и логично ?
https://stackoverflow.com/questions/3558119/are-non-void-self-closing-tags-valid-in-html5
Alexander
06.06.2018
19:16:23
xhtml ftw
Imants
06.06.2018
19:34:07
переформулирую, функция принимает на вход Text, который HTML, оттуда надо выкинуть несколько тегов с определенным классом/id, и вернуть Text
Может,
https://developers.google.com/web/updates/2017/04/headless-chrome
?
Загрузить, запустить js, который удалит, что надо, и
--dump-dom
, а?
Вдруг сработает..
Alexander
06.06.2018
19:37:45
хочу заметить что хедлес хром не очень стабилен, увы
плюс можно получить javascript-бомбу
но из обсуждаемых вариантов все равно лучший
Imants
06.06.2018
19:39:16
Кроме Хрома, можно выбрать другой из списка:
https://en.m.wikipedia.org/wiki/Headless_browser
Alexander
06.06.2018
19:46:28
мне кажется все одно фигня
phantomjs deprecated
так что со списком надо аккуратнее
ну то есть главная проблема в том, что если этот html user input можно крепко обломаться
Слава
06.06.2018
19:50:21
Я такого не писал, но первый же запрос в гугл "haskell html parser" выдал мне ссылку на tagsoup
Почему бы просто не воспользоваться им, не пройтись по узлам и не удалить всё ненужное?