LINUX.ORG.RU

Racket - извлечь из страницы тела div'ов определенного класса в список строк

 , ,


0

1

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

★★★★★

Последнее исправление: cdshines (всего исправлений: 1)

Ответ на: комментарий от cdshines

xpath - самый адекватный инструмент здесь?

Для подобного рода задач это самый адекватный инструмент вообще.

anonymous
()
Ответ на: комментарий от anonymous

спасибо большое, я уже думал, ниасилю свою задумку.

cdshines ★★★★★
() автор топика
Ответ на: комментарий от anonymous

Добрался до своего говнокода, твой пример что-то это не очень взлетает у меня. Я попробовал под себя переделать, но мне кажется, что-то в нем неправильно.

cdshines ★★★★★
() автор топика
Ответ на: комментарий от cdshines
#lang racket
(require net/url
         (planet neil/html-parsing:2:0)
         (planet neil/html-writing:2:0)
         "rsx.rkt")

(define (extract class url)
  (map xexp->html 
       ((sxpath `(// (div (@ (equal? (class ,class)))) ,(select-kids (λ (node) (not ((node-typeof? '@) node)))))) 
        (html->xexp (port->string (get-pure-port (string->url url)))))))

rsx.rkt - это SXPatch.scm по ссылке выше, но со следующими изминениями: 1. сверху добавлено:

#lang racket
(provide sxpath select-kids node-typeof?)

(define (cout . args)
  (for-each (lambda (x)
              (if (procedure? x) (x) (display x)))
            args))

(define (cerr . args)
  (for-each (lambda (x)
              (if (procedure? x) (x (current-error-port)) (display x (current-error-port))))
            args))

(define nl (string #\newline))
выражение:
(assert (positive? n))
меняется на:
(when (not (positive? n)) (raise-argument-error 'node-pos "positive-number?" 'n))
ну и комментим тесты. Результат, собсно:
Welcome to DrRacket, version 5.3.0.20--2012-08-26(e448351/a) [3m].
Language: racket.
> (extract "userpic" "http://www.linux.org.ru/forum/development/8183225?lastmod=1346702563115")
'("<img class=\"photo\" src=\"/photos/81800:-12108261.png\" alt=\"cdshines\" width=\"150\" height=\"150\">"
  "<img class=\"photo\" src=\"/photos/81800:-12108261.png\" alt=\"cdshines\" width=\"150\" height=\"150\">"
  "<img class=\"photo\" src=\"/photos/81800:-12108261.png\" alt=\"cdshines\" width=\"150\" height=\"150\">"
  "<img class=\"photo\" src=\"/photos/81800:-12108261.png\" alt=\"cdshines\" width=\"150\" height=\"150\">")
> 

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.