Парсинг веба на Emacs Lisp
Наверно достаточно было бы указать этот репо на Гитхабе: zweifisch/enlive - один крутой китаец практически все сделал за остальных. Поэтому приводить какой-то дополнительный быдлокод будет излишне, разве что некоторые заметки по ходу пьесы.
'enlive-text' позволяет получить собственно текст из сырых (raw) результатов, а 'enlive-attr' отдает атрибуты, например нам нужен только "a href" - URL ссылки:
(enlive-attr (enlive-query el [a])
el - просто некий элемент HTML-документа, в данном случае первая попавшаяся ссылка в блоке.
Сжимать, сжимать, сжимать! В результате парсинга некоторых сайтов на выходе страшная каша с десятками пробелов и табуляций подряд. Требуется что-то такое:
(replace-regexp "\t" " " nil 1 (point-max))
(replace-regexp "\s+" " " nil 1 (point-max))
(replace-regexp "\n\s" "" nil 1 (point-max))
А если что-то обновилось? Вот тут удобно считать хеш от блока - встроенная функция md5.
Ну а как хранить результаты? Sqlite, или может быть mailbox (MH)? Но победила лень ;) В обычном файле *.org - и это оказалось чертовски удобно (собственно, для того оно и было придумано).
И главный вопрос: а нафига все это надо?? ;)
Ну, тут прямо скажем все просто. Некоторые нехорошие пи@@ы не делают лент RSS на своих сайтах - либо тупо не умеют, либо говноконтент в лентах новостей не протолкнуть. А я часто брезгую туда ходить и бесполезно тратить свое время. Зато у нас есть компьютеры, которые способны обрабатывать по нужным алгоритмам практически любую информацию. Тем более уж текстовую. Тем более какой-то рунет ;)
'enlive-text' позволяет получить собственно текст из сырых (raw) результатов, а 'enlive-attr' отдает атрибуты, например нам нужен только "a href" - URL ссылки:
(enlive-attr (enlive-query el [a])
el - просто некий элемент HTML-документа, в данном случае первая попавшаяся ссылка в блоке.
Сжимать, сжимать, сжимать! В результате парсинга некоторых сайтов на выходе страшная каша с десятками пробелов и табуляций подряд. Требуется что-то такое:
(replace-regexp "\t" " " nil 1 (point-max))
(replace-regexp "\s+" " " nil 1 (point-max))
(replace-regexp "\n\s" "" nil 1 (point-max))
А если что-то обновилось? Вот тут удобно считать хеш от блока - встроенная функция md5.
Ну а как хранить результаты? Sqlite, или может быть mailbox (MH)? Но победила лень ;) В обычном файле *.org - и это оказалось чертовски удобно (собственно, для того оно и было придумано).
И главный вопрос: а нафига все это надо?? ;)
Ну, тут прямо скажем все просто. Некоторые нехорошие пи@@ы не делают лент RSS на своих сайтах - либо тупо не умеют, либо говноконтент в лентах новостей не протолкнуть. А я часто брезгую туда ходить и бесполезно тратить свое время. Зато у нас есть компьютеры, которые способны обрабатывать по нужным алгоритмам практически любую информацию. Тем более уж текстовую. Тем более какой-то рунет ;)
Отправить комментарий